Java List <map <string,long =“”>&gt;地图键组的总和

时间:2015-12-17 01:54:27

标签: java lambda java-8 java-stream

我有一个:List<Map<String, Long>> items = new ArrayList<>();

我想获得一个Map,其中键被分组,值是总和。

示例:列表

  • 项目0
    • foo - &gt; 1
    • bar - &gt; 2
  • 第1项
    • foo - &gt; 4
    • bar - &gt; 3

结果:地图

  • foo - &gt; 5
  • bar - &gt; 5

我知道如何以“长”方式执行此操作,但尝试使用java 8功能发现lambda / streaming / groupby方法。有什么想法吗?

1 个答案:

答案 0 :(得分:10)

您可以使用groupingBy收藏家:

import static java.util.stream.Collectors.groupingBy;
import static java.util.stream.Collectors.summingLong;

items.stream()
        .flatMap(m -> m.entrySet().stream())
        .collect(groupingBy(Map.Entry::getKey, summingLong(Map.Entry::getValue)));

或者您可以使用toMap

import static java.util.stream.Collectors.toMap;

items.stream()
        .flatMap(m -> m.entrySet().stream())
        .collect(toMap(Map.Entry::getKey, Map.Entry::getValue, Long::sum));