Java 将多个贴图聚合为一个贴图的优雅而高效的方法

Java 将多个贴图聚合为一个贴图的优雅而高效的方法,java,dictionary,java-8,hashmap,Java,Dictionary,Java 8,Hashmap,我有一张地图清单。所有地图都有相同的键。现在,我想通过对每个键的值求和,将列表中的所有映射聚合到一个映射 感觉应该有更好的方法来做到这一点 //源代码 public List of_maps=new ArrayList(); //目的地 私有映射aggr_Map=newhashmap(); for(整数i:list of_maps.iterator().next().keySet()){ 长c=0; 用于(地图地图:地图列表){ c+=map.get(i.getCount(); } aggr_映

我有一张地图清单。所有地图都有相同的键。现在,我想通过对每个键的值求和,将列表中的所有映射聚合到一个映射

感觉应该有更好的方法来做到这一点

//源代码
public List of_maps=new ArrayList();
//目的地
私有映射aggr_Map=newhashmap();
for(整数i:list of_maps.iterator().next().keySet()){
长c=0;
用于(地图地图:地图列表){
c+=map.get(i.getCount();
}
aggr_映射put(i,c);
}

我经常运行此聚合,因此运行时非常重要…

您可以这样做

Map<Integer, Long> numToSumMap = list_of_maps.stream()
    .flatMap(m -> m.entrySet().stream())
    .collect(Collectors.groupingBy(Map.Entry::getKey, 
        Collectors.summingLong(Map.Entry::getValue)));
Map numToSumMap=Map.stream()的列表
.flatMap(m->m.entrySet().stream())
.collect(Collectors.groupingBy(Map.Entry::getKey、,
Collectors.summingLong(Map.Entry::getValue));

Counter/numRecordsEachSubpartition从何而来?如果性能是最重要的考虑因素,我会坚持使用您现在的解决方案,而不是使用有一些开销的流。我假设
aggr\u map
numRecordsEachSubpartition
应该是相同的
map
,对吗,我把名字弄混了-现在修好了!
aggr\u映射是否需要一个全新的映射,或者可以将元素添加到列表中的现有映射之一?如果不进行任何基准测试,我不能说它的性能更高。但对我来说,它肯定更具可读性。说到代码的可读性和可维护性,对我们来说是至关重要的。我对性能做了一些小的研究,发现使用流似乎会对性能产生负面影响。请参阅:但是streams允许您并行执行此操作,如果您有大量工作,这将提高性能。上述基于流的解决方案是并行友好的。