栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

展平地图>到地图 与流和lambda

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

展平地图>到地图 与流和lambda

您需要使用

flatMap
将值展平到一个新的流中,但是由于仍然需要原始键来收集到中
Map
,因此您必须映射到一个包含键和值的临时对象,例如

Map<String, Integer> mapTo = mapFrom.entrySet().stream()       .flatMap(e->e.getValue().stream()         .map(v->new AbstractMap.SimpleImmutableEntry<>(e.getKey(), v)))       .collect(Collectors.toMap(Map.Entry::getValue, Map.Entry::getKey));

Map.Entry
是一个独立的为不存在的元组类型,能够保持不同类型的两个对象的任何其它类型的是足够的。

不需要这些临时对象的替代方法是自定义收集器:

Map<String, Integer> mapTo = mapFrom.entrySet().stream().collect(    HashMap::new, (m,e)->e.getValue().forEach(v->m.put(v, e.getKey())), Map::putAll);

这不同于

toMap
静默覆盖重复键,而
toMap
如果没有重复键,则没有合并功能将引发异常。基本上,此自定义收集器是

Map<String, Integer> mapTo = new HashMap<>();mapFrom.forEach((k, l) -> l.forEach(v -> mapTo.put(v, k)));

但是请注意,即使输入图非常大,此任务也不会从并行处理中受益。只有在流管道中还有其他可以从SMP中受益的计算密集型任务时,才有可能从并行流中受益。因此,也许简洁的顺序Collection
API解决方案是可取的。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/497542.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号