【问题标题】:How to unwrap a List<Map>, group by Map keys and reduce by Map values如何解开 List<Map>,按 Map 键分组并按 Map 值减少
【发布时间】:2019-08-29 05:07:46
【问题描述】:

我有一个List&lt;Map&lt;String, Double&gt;&gt; 代表一些由Map 键中的“类别”存储的计算。

[{a: 1, b:2}, {a:4, b:5})

我想按“类别”计算平均值,例如:{a: 2.5 , b: 3.5}

我尝试过类似的东西

.collector(Collectors.groupingBy..)

但是第一个参数要求提供鉴别功能,不知道怎么从Map项中捞出来。

知道如何用 Java8 做到这一点吗?谢谢!

【问题讨论】:

    标签: java list dictionary java-8 java-stream


    【解决方案1】:

    您可以使用flatMap 将所有映射的所有条目提取到单个Stream 中。然后您可以按键对它们进行分组并计算值的平均值。

    Map<String,Double> average =
        list.stream()
            .flatMap(m->m.entrySet().stream())
            .collect(Collectors.groupingBy(Map.Entry::getKey,
                                           Collectors.averagingDouble(Map.Entry::getValue)));
    

    【讨论】:

      【解决方案2】:

      您可以使用Collectors.averagingDouble 作为下游

      return listOfMap.stream()
              .flatMap(a -> a.entrySet().stream())
              .collect(Collectors.groupingBy(Map.Entry::getKey,
                      Collectors.averagingDouble(Map.Entry::getValue)));
      

      【讨论】:

        猜你喜欢
        • 2021-04-29
        • 2017-02-06
        • 2018-03-17
        • 1970-01-01
        • 2020-10-04
        • 2019-08-26
        • 1970-01-01
        • 2015-03-29
        • 1970-01-01
        相关资源
        最近更新 更多