如何使用lambda获得哈希映射中值的键值 [英] How to get the count of keys for values in a hash map using lambda
问题描述
我有一个散列图
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());
}};
Directmap:{0 = [a,b],1 = [b ,2 = [d],3 = [d,e],4 = [e],5 = []}
我想计算每个值的键数。例如:a
有一个键,b
有两个键,...,e
有两个键,分别是3和4.
我试过这样的事情:
Map< Object,Long> ex = Directmap.entrySet()。stream()
.collect(Collectors.groupingBy(e - > e.getKey(),Collectors.counting()));
我想将键数作为输出值。像这样:
a = [1],b = [2],c = [1],d = [2] ,e = [2]
平面映射地图的每个值。
在此代码中,只保留地图的值(因为您对按键不感兴趣)。每个值 List
都是平面映射的,这样Stream流水线就是 Stream< List< String>> code>变成
流< String>
。最后,按照( groupingBy
)身份函数和对元素执行的约简只是计算数字( counting()
)。
Map< String,Long> ex =
Directmap.values()
.stream()
.flatMap(Collection :: stream)
.collect(Collectors.groupingBy(v - > v,Collectors。数数()));
请注意,如果一个值在初始映射中出现两次,它也会计算两次。如果要计算不同值的数量,可以添加对 Set )之前,清除 - rel =nofollow> distinct()
c>而不是 List
)。
I have a hash map
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());
}};
Directmap: {0=[a, b], 1=[b, c], 2=[d], 3=[d, e], 4=[e], 5=[]}
I want to count the number of keys for each value. For example: "a"
has one key, "b"
has two keys, ..., "e"
has two keys namely 3 and 4.
I tried something like this:
Map<Object, Long> ex = Directmap.entrySet().stream()
.collect(Collectors.groupingBy(e -> e.getKey(), Collectors.counting()));
I want the values with number of keys as the output. Like this :
a=[1], b=[2], c=[1], d=[2], e=[2]
You can do this by flat mapping each value of the map.
In this code, only the values of the map are kept (since you are not interested in the keys). Each value, which is a List<String>
is flat mapped so that the Stream pipeline, which is Stream<List<String>>
becomes Stream<String>
. Finally, the Stream is grouped by (groupingBy
) the identity function and the reduction performed on the elements is just counting the number of occurences (counting()
).
Map<String, Long> ex =
Directmap.values()
.stream()
.flatMap(Collection::stream)
.collect(Collectors.groupingBy(v -> v, Collectors.counting()));
Note that if a value is appearing twice in the initial map, it will also counted twice. If you want to count the number of distinct values, you can add a call to distinct()
before collecting the result (or use a Set
instead of a List
).
这篇关于如何使用lambda获得哈希映射中值的键值的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!