Java 如何使用lambda获取哈希映射中值的键计数
我有一个散列图Java 如何使用lambda获取哈希映射中值的键计数,java,lambda,hashmap,java-8,java-stream,Java,Lambda,Hashmap,Java 8,Java Stream,我有一个散列图 Map<Integer, List<String>> Directmap = new HashMap<Integer, List<String>>() {{ put(0, Arrays.asList(a, b)); put(1, Arrays.asList(b, c)); put(2, Arrays.asList(d)); put(3, Arrays.asList(d, e)); put(4,
Map<Integer, List<String>> Directmap = new HashMap<Integer, List<String>>() {{
put(0, Arrays.asList(a, b));
put(1, Arrays.asList(b, c));
put(2, Arrays.asList(d));
put(3, Arrays.asList(d, e));
put(4, Arrays.asList(e));
put(5, Arrays.asList());
}};
我希望将具有键数的值作为输出。像这样:
a=[1], b=[2], c=[1], d=[2], e=[2]
可以通过平面映射贴图的每个值来实现这一点 在这段代码中,只保留映射的值(因为您对键不感兴趣)。作为
列表
的每个值都是平面映射的,因此流管道(即流
变为流
)。最后,流由identity函数()进行分组,对元素执行的缩减只是计算发生次数()
Map ex=
Directmap.values()
.stream()
.flatMap(集合::流)
.collect(Collectors.groupingBy(v->v,Collectors.counting());
请注意,如果一个值在初始映射中出现两次,它也将计数两次。如果要计算不同值的数量,可以在收集结果之前添加对的调用(或使用
集而不是列表)。您应该始终发布编译的代码,但这不会计算键数,例如,如果一个值在列表中多次出现,尽管具有相同的密钥,它仍将被计数多次。添加一个distinct
不会有任何帮助,因为每个值都会被“计数”一次,即使它出现在不同的键上。@Tunaki[link]()基于这篇文章,我有一个问题要问。请你也检查一下这个链接好吗。
a=[1], b=[2], c=[1], d=[2], e=[2]
Map<String, Long> ex =
Directmap.values()
.stream()
.flatMap(Collection::stream)
.collect(Collectors.groupingBy(v -> v, Collectors.counting()));