我有以下地图:
>>> all('' < chr(i) for i in range(0x110000))
True
以下代码返回这些映射:
{21=0, 22=2, 11=0, 12=0}
{21=3, 22=0, 11=6, 12=3}
{21=6, 22=0, 11=7, 12=0}
{21=5, 22=7, 11=9, 12=1}
方法for (Chrom t: obj.getChroms) {
Map<Integer, Integer> result = t.getExecutionCount();
}
返回一个地图。对于上面给出的示例,我有四个色度,其中每个色度将返回一个图。
我想分别汇总每个键的值,以便最终结果将是:
getExecutionCount()
是否可以使用流来做到这一点?如果没有,我该怎么办?
答案 0 :(得分:8)
尝试一下:
List<Map<Integer, Integer>> maps;
Map<Integer, Integer> result = maps.stream()
.map(Map::entrySet)
.flatMap(Collection::stream)
.collect(Collectors.groupingBy(
Map.Entry::getKey,
Collectors.summingInt(Map.Entry::getValue)));
答案 1 :(得分:7)
您可以创建地图流,并使用flatMap
,
Stream.of(map1, map2, map3)
.flatMap(m -> m.entrySet()
.stream())
.collect(Collectors.groupingBy(
Map.Entry::getKey,
Collectors.summingInt(Map.Entry::getValue)
)
);
答案 2 :(得分:2)
可以使用Stream
。它应该可以工作(不幸的是我现在无法编译)
Map<Integer, Integer> result = Stream.of(map1, map2, map3, map4)
.map(Map::entrySet)
.flatMap(Set::stream)
.collect(Collectors.toMap(
Map.Entry::getKey,
Map.Entry::getValue,
Integer::sum)
);
一些解释
Map
Stream
内包含的所有条目进行唯一的Map
Integer::sum
,这将减少同一键的两个值