如何有效地获取HashMap数组中几个HashMap的平均值?

时间:2019-04-10 22:55:26

标签: java arraylist hashmap

我有一个HashMap列表

List<Map<String, Object>> arrOfMaps = new ArrayList<>();

所有HashMap具有相同的键,并且所有HashMap中的键数均相同。

现在,我要连续获取HashMap中所有键的所有值的平均值。

例如,假设下面是我从HashMaps数组中获得的HashMaps

arrOfMaps[0]={
A:1,
B:1
}

arrOfMaps[1]={
A:4,
B:5
}

arrOfMaps[2]={
A:4,
B:7
}

.
.
.

我想从3个连续的HashMap中获得平均值A,即A_avg =(1 + 4 + 4)/ 3,B_avg =(1 + 5 + 7)/ 3,依此类推。

什么是有效的方法?

1 个答案:

答案 0 :(得分:2)

您可以使用流找到平均值:

Map<String, Double> average = arrOfMaps.stream()
    .flatMap(map -> map.entrySet().stream())
    .collect(Collectors.groupingBy(Map.Entry::getKey, 
             Collectors.averagingInt(value -> (Integer)(value.getValue()))));

System.out.println(average);  // {A=3.0, B=4.333333333333333}

使用flatMap,您将获得所有传入地图的输入流集。接下来,您将按字符串键分组,并分别使用groupingByaveragingInt通过每个键获取平均值