优雅而高效的方式将多个地图聚合到一个地图上

时间:2019-05-15 08:21:54

标签: java dictionary java-8 hashmap

我有一张地图清单。所有地图都具有相同的键。现在,我想通过汇总每个键的值,将列表中的所有地图聚合到一个地图。

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

// source
public List<Map<Integer, Long>> list_of_maps = new ArrayList<>();

// destination
private Map<Integer, Long> aggr_map = new HashMap<>();


for(Integer i : list_of_maps.iterator().next().keySet()){
    long c = 0;
    for(Map<Integer, Long> map : list_of_maps){
        c += map.get(i).getCount();
    }
    aggr_map.put(i, c);
}

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

1 个答案:

答案 0 :(得分:7)

您可以这样做

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