我有一个Stream< Map< K, V > >
,我试图合并这些地图在一起,但在列表中保留重复的值,所以最终的类型将是Map< K, List<V> >
。有没有办法做到这一点?我知道toMap
收集器有一个二元函数来基本上选择返回哪个值,但它可以跟踪转换后的列表吗?收集地图流<K,V>到地图<K,List<V>>
即
如果a
是Stream< Map< String, Int > >
a.flatMap(map -> map.entrySet().stream()).collect(
Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue, (val1, val2) -> ??
);
你可以使用['groupingBy(Function,Collector)'](https://docs.oracle.com/javase/8/docs/api/java/util/stream/Collectors.html#groupingBy-java.util.function.Function- java.util.stream.Collector-)并省略'HashMap :: new'。另外,对于喜欢方法引用的用户,可以执行'a.map(Map :: entrySet).flatMap(Set :: stream)'。 – shmosel
谢谢我编辑了我的答案。 – NoDataFound