Java 8流-合并地图列表

惠特芬

我正在尝试使用的流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()),所以也许我是对的,我只需要在此之前弄清楚如何真正地合并它们而不弄乱结果。

提前致谢。

亚历克西斯C.

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)));

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章