我有一个:List<Map<String, Long>> items = new ArrayList<>();
我想获得一个Map,其中键被分组,值是总和。
示例:列表
结果:地图
我知道如何以“长”方式执行此操作,但尝试使用java 8功能发现lambda / streaming / groupby方法。有什么想法吗?
答案 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));