繁体   English   中英

Java 8流 - 合并地图列表

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM