Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/376.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何使用lambda获取哈希映射中值的键计数_Java_Lambda_Hashmap_Java 8_Java Stream - Fatal编程技术网

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()));