Java列表<;地图<;长字符串>&燃气轮机;映射键的group by之和
我有一个:Java列表<;地图<;长字符串>&燃气轮机;映射键的group by之和,java,lambda,java-8,java-stream,Java,Lambda,Java 8,Java Stream,我有一个:List items=new ArrayList() 我想得到一个映射,其中键是按分组的,值是总和 示例:列表 项目0 foo->1 酒吧->2 项目1 foo->4 酒吧->3 结果:地图 foo->5 酒吧->5 我知道如何“长期”做到这一点,但我尝试使用Java8特性发现一种lambda/streaming/groupby方法。有什么想法吗?您可以使用groupingBy收集器: import static java.util.stream.Collectors.
List items=new ArrayList()代码>
我想得到一个映射,其中键是按分组的,值是总和
示例:列表
- 项目0
- foo->1
- 酒吧->2
- 项目1
- foo->4
- 酒吧->3
结果:地图
- foo->5
- 酒吧->5
我知道如何“长期”做到这一点,但我尝试使用Java8特性发现一种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));
可能只是一个输入错误,但是你能重申一下你想要的密钥分组依据是什么吗,因为你说“…其中密钥分组依据是…”。嘿@Misha,你能在导入语句中添加吗?我无法获取要编译的方法引用。是否使用eclipse?eclipse在类型推断方面存在问题(或者至少以前的版本是这样)。但我刚刚在eclipse Mars上试用过,它编译得很好。请注意,summingLong
解决方案在多个键合并为一个键时可能工作得更快,因为它减少了装箱。@TagirValeev对,但如果重复键很少,则toMap
会更快