当前位置: 首页 > 知识库问答 >
问题:

Java8流-合并地图列表

鲁品
2023-03-14

我试图使用List的流

考虑此数据集(使用JSON使其更易于阅读):

[
    {"field1": 1, "field2": 5},
    {"field2": 6, "field3": 10},
    {"field1": 3, "field4": 15}
]

我希望结果如下(顺序无关紧要):

{"field1": 4, "field2": 11, "field3": 10, "field4": 15}

我想把所有的键加起来,并把它们组合成一张地图。在Java8中,有没有一种很好的方法可以通过流接口实现这一点?

我发现了Collectors.groupingBy(o-

提前谢谢。


共有1个答案

程举
2023-03-14

计数()将只返回按应用于每个键的函数分组的值的数量。如果您想对它们求和,您要寻找的下游收集器是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)));
 类似资料:
  • 问题内容: 我想将两个Map与JAVA 8 Stream合并: 我尝试使用此实现: 但是,此实现只会产生如下结果: 如果中没有包含一个键,则会将其作为新键添加到相应的String列表中。如果键在和中重复,则两个值列表将被合并为:,然后是。 问题答案: 您可以通过遍历中的所有条目并将它们合并到中来实现此目的。 下面通过调用操作消耗每个条目的键和值的位置来遍历的条目。对于每个条目,我们叫上:这将要么创

  • 我想按id分组。 结果应如下所示: 静态编程语言中最惯用的方法是什么?

  • 我试图对对象中的每个条目执行映射操作。 我需要从键中去掉前缀,并将值从一种类型转换为另一种类型。我的代码从 映射实例并使用,这看起来很难看。 还有更好的选择吗?使用for循环似乎更好: 我应该避免使用流API吗?还是我错过了更好的方式?

  • 我有两个(或更多)

  • 我有两个地图 和 类型为

  • 我试图翻译这个(简化)代码使用Java-8流: 以下是我尝试过的: 但以上给出了所有