Java 如何打开列表<;地图>;,按贴图键分组并按贴图值减少

Java 如何打开列表<;地图>;,按贴图键分组并按贴图值减少,java,list,dictionary,java-8,java-stream,Java,List,Dictionary,Java 8,Java Stream,我有一个列表表示一些计算,这些计算按映射键中的“类别”存储 [{a: 1, b:2}, {a:4, b:5}) 我想通过“分类”来计算平均值,比如:{a:2.5,b:3.5} 我试过用类似的东西 .collector(Collectors.groupingBy..) 但是第一个参数要求提供判别函数,我不知道如何从Map项中获取它 你知道如何用Java8实现吗?谢谢大家! 您可以使用flatMap将所有地图的所有条目提取到单个流中。然后可以按键对它们进行分组,并计算值的平均值 Map<S

我有一个
列表
表示一些计算,这些计算按
映射
键中的“类别”存储

[{a: 1, b:2}, {a:4, b:5})
我想通过“分类”来计算平均值,比如:
{a:2.5,b:3.5}

我试过用类似的东西

.collector(Collectors.groupingBy..)
但是第一个参数要求提供判别函数,我不知道如何从
Map
项中获取它


你知道如何用Java8实现吗?谢谢大家!

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

Map<String,Double> average =
    list.stream()
        .flatMap(m->m.entrySet().stream())
        .collect(Collectors.groupingBy(Map.Entry::getKey,
                                       Collectors.averagingDouble(Map.Entry::getValue)));
Map平均值=
list.stream()
.flatMap(m->m.entrySet().stream())
.collect(Collectors.groupingBy(Map.Entry::getKey、,
收集器.averagingDouble(Map.Entry::getValue));

您可以使用
收集器。averagingDouble
作为下游

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