pri*_*iya 3 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, Arrays.asList(e));
put(5, Arrays.asList());
}};
Run Code Online (Sandbox Code Playgroud)
Directmap: {0=[a, b], 1=[b, c], 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()));
Run Code Online (Sandbox Code Playgroud)
我希望带有键数的值作为输出.像这样 :
a=[1], b=[2], c=[1], d=[2], e=[2]
Run Code Online (Sandbox Code Playgroud)
您可以通过平面映射地图的每个值来完成此操作.
在此代码中,仅保留映射的值(因为您对键不感兴趣).每个值,都是一个List<String>
平面映射,以便Stream管道Stream<List<String>>
成为Stream<String>
.最后,Stream通过(groupingBy
)对身份函数进行分组,对元素执行的减少只是计算出现次数(counting()
).
Map<String, Long> ex =
Directmap.values()
.stream()
.flatMap(Collection::stream)
.collect(Collectors.groupingBy(v -> v, Collectors.counting()));
Run Code Online (Sandbox Code Playgroud)
请注意,如果某个值在初始地图中出现两次,则它也会计算两次.如果要计算不同值的数量,可以distinct()
在收集结果之前添加一个调用(或使用Set
而不是a List
).
归档时间: |
|
查看次数: |
1715 次 |
最近记录: |