Java 如何有效地计算哈希映射数组中多个哈希映射的平均值?

Java 如何有效地计算哈希映射数组中多个哈希映射的平均值?,java,arraylist,hashmap,Java,Arraylist,Hashmap,我有一个HashMaps列表 List<Map<String, Object>> arrOfMaps = new ArrayList<>(); 我想得到3个连续HashMaps的平均值,即A_avg=(1+4+4)/3,B_avg=(1+5+7)/3等等 有什么有效的方法可以做到这一点?您可以使用流找到平均值: Map<String, Double> average = arrOfMaps.stream() .flatMap(map -&

我有一个HashMaps列表

List<Map<String, Object>> arrOfMaps = new ArrayList<>();
我想得到3个连续HashMaps的平均值,即A_avg=(1+4+4)/3,B_avg=(1+5+7)/3等等


有什么有效的方法可以做到这一点?

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

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}
Map average=arrOfMaps.stream()
.flatMap(map->map.entrySet().stream())
.collect(Collectors.groupingBy(Map.Entry::getKey、,
收集器.averagint(value->(Integer)(value.getValue());
系统输出打印项次(平均);//{A=3.0,B=4.333}

使用,您将获得所有传入映射的入口流集。接下来,您将按字符串键分组,并分别使用和获得每个键的平均值

为什么值
对象
而不是
整数
?我有一个包含无法更改的对象值的传入HashMap。我需要将其转换为Double/Integer来取average.averagingdoull而不是averagingInt?不清楚它们实际上是
Integer
s。可能更安全的方法是将其转换为
Number
并调用
intValue()
@tank乐意帮助!如果有帮助的话,别忘了接受答案
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}