我有一个: List
我想得到一个Map,其中键被分组,值是总和.
示例:列表
项目0
foo - > 1
吧 - > 2
第1项
foo - > 4
吧 - > 3
结果:地图
foo - > 5
吧 - > 5
我知道如何以"长"方式执行此操作,但尝试使用java 8功能发现lambda/streaming/groupby方法.有什么想法吗?
你可以使用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));