我有一个List<Map<String, Double>>
,代表一些计算,这些计算由“ {category””存储在Map
键中。
[{a: 1, b:2}, {a:4, b:5})
我想按“类别”来计算平均值,例如:{a: 2.5 , b: 3.5}
。
我尝试过类似的东西
.collector(Collectors.groupingBy..)
但是第一个参数要求提供判别函数,我不知道该如何从Map
项目中获取它。
有人知道如何用Java8做到这一点吗?谢谢!
答案 0 :(得分:2)
您可以使用flatMap
将所有地图的所有条目提取到一个Stream
中。然后,您可以通过键将它们分组并计算出平均值。
Map<String,Double> average =
list.stream()
.flatMap(m->m.entrySet().stream())
.collect(Collectors.groupingBy(Map.Entry::getKey,
Collectors.averagingDouble(Map.Entry::getValue)));
答案 1 :(得分:2)
您可以将Collectors.averagingDouble
用作下游
return listOfMap.stream()
.flatMap(a -> a.entrySet().stream())
.collect(Collectors.groupingBy(Map.Entry::getKey,
Collectors.averagingDouble(Map.Entry::getValue)));