如何使用lambda获取哈希映射中值的键数

我有一个哈希映射

Map<Integer, List> Directmap = new HashMap<Integer, List>() {{ 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=[]}

我想计算每个值的键数。 例如: "a"有一个键, "b"有两个键,……, "e"有两个键,即3和4。

我试过这样的事情:

 Map 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>将成为Stream 。 最后,Stream按( groupingBy )对身份函数进行groupingBy ,对元素执行的减少只是计算出现次数( counting() )。

 Map ex = Directmap.values() .stream() .flatMap(Collection::stream) .collect(Collectors.groupingBy(v -> v, Collectors.counting())); 

请注意,如果某个值在初始地图中出现两次,则它也会计算两次。 如果要计算不同值的数量,可以在收集结果之前添加对distinct()的调用(或使用Set而不是List )。