Java List<Map<String, Long>> 映射键的分组总和

标签 java lambda java-8 java-stream

我有:List<Map<String, Long>> items = new ArrayList<>();
我想得到一个 Map,其中键是分组的,值是总和。

示例:列表

  • 项目 0
  • foo -> 1
  • 酒吧 -> 2
  • 第 1 项
  • foo -> 4
  • 酒吧 -> 3

  • 结果: map
  • foo -> 5
  • 酒吧 -> 5

  • 我知道如何以“长”的方式做到这一点,但试图发现使用 java 8 功能的 lambda/streaming/groupby 方法。有什么想法吗?

    最佳答案

    您可以使用 groupingBy集电极:

    import static java.util.stream.Collectors.groupingBy;
    import static java.util.stream.Collectors.summingLong;
    
    items.stream()
            .flatMap(m -> m.entrySet().stream())
            .collect(groupingBy(Map.Entry::getKey, summingLong(Map.Entry::getValue)));
    

    或者您可以使用 toMap :
    import static java.util.stream.Collectors.toMap;
    
    items.stream()
            .flatMap(m -> m.entrySet().stream())
            .collect(toMap(Map.Entry::getKey, Map.Entry::getValue, Long::sum));
    

    关于Java List<Map<String, Long>> 映射键的分组总和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34325389/

    相关文章:

    java - 正则表达式从 "/token1/token2/token3"拆分第一个

    java - Apache NiFi 无法启动流 Controller ,因为 TLS 配置无效 : The keystore properties are not valid

    c# - 使用 LINQ 和 Lambda 加入/在何处

    使用表达式的泛型类的 C# 加速方法调用

    java - 将 bigint postgres 数据类型隐式转换为 Java Long

    java - 使用流对正整数进行质因数分解

    java - 何时使用权限 WRITE_CONTACT 和 READ_CONTACT?

    java - JAXB:将无效的 xml 文档解码为对象

    c++ - 通过 lambda 捕获列表中的常量引用传递

    安装 Java 8 后,Java 插件不会出现在 Firefox 中