ver*_*uyi 5 java java-8 java-stream collectors
我有一个Stream< Map< K, V > >
,我试图将这些地图合并在一起,但保留列表中的重复值,所以最终的类型将是Map< K, List<V> >
.有没有办法做到这一点?我知道toMap
收集器有一个二进制函数来基本上选择返回哪个值,但是它能跟踪转换后的列表吗?
即
如果a
是Stream< Map< String, Int > >
a.flatMap(map -> map.entrySet().stream()).collect(
Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue, (val1, val2) -> ??
);
Run Code Online (Sandbox Code Playgroud)
使用groupingBy:看看javadoc,但在你的情况下它应该是这样的:
a.flatMap(map -> map.entrySet().stream())
.collect(
Collectors.groupingBy(
Map.Entry::getKey,
HashMap::new,
Collectors.mapping(Map.Entry::getValue, toList())
)
);
Run Code Online (Sandbox Code Playgroud)
要么:
a.map(Map::entrySet).flatMap(Set::stream)
.collect(Collectors.groupingBy(
Map.Entry::getKey,
Collectors.mapping(Map.Entry::getValue, toList())
)
);
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
1104 次 |
最近记录: |