[英]Java 8 streams - merging a list of Maps
我正在尝试使用List<Map<String, Integer>>
来合并包含在一个中的所有地图。 这是将多个请求响应聚合为一个。
考虑这个数据集(使用JSON使其更容易阅读):
[
{"field1": 1, "field2": 5},
{"field2": 6, "field3": 10},
{"field1": 3, "field4": 15}
]
我希望它会导致以下(顺序并不重要):
{"field1": 4, "field2": 11, "field3": 10, "field4": 15}
我想将所有键相加并将它们组合成一个地图。 使用Java 8中的Stream接口有一个很好的方法吗?
我发现了Collectors.groupingBy(o -> o, Collectors.counting())
,所以也许我是在正确的路线上,我只需要弄清楚如何在没有搞砸结果的情况下实际合并它们。
提前致谢。
counting()
将返回由您为每个键应用的函数分组的值的数量。 如果要总结他们,你正在寻找的下游收集器是summingInt
(或summingLong
如果你可能溢出):
import static java.util.stream.Collectors.groupingBy;
import static java.util.stream.Collectors.summingInt;
...
Map<String, Integer> map =
list.stream()
.flatMap(m -> m.entrySet().stream())
.collect(groupingBy(Map.Entry::getKey, summingInt(Map.Entry::getValue)));
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.