我想将流中的项目收集到一个映射中,该映射将相等的对象组合在一起,并映射到出现的次数。
List<String> list = Arrays.asList("Hello", "Hello", "World");
Map<String, Long> wordToFrequency = // what goes here?
所以在这种情况下,我希望 map 包含以下条目:
Hello -> 2
World -> 1
我该怎么做?
最佳答案
我认为您只是在寻找 overload这需要另一个 Collector
来指定如何处理每个组...然后 Collectors.counting()
进行计数:
import java.util.*;
import java.util.stream.*;
class Test {
public static void main(String[] args) {
List<String> list = new ArrayList<>();
list.add("Hello");
list.add("Hello");
list.add("World");
Map<String, Long> counted = list.stream()
.collect(Collectors.groupingBy(Function.identity(), Collectors.counting()));
System.out.println(counted);
}
}
结果:
{Hello=2, World=1}
(也有可能使用 groupingByConcurrent
来提高效率。对于您的真实代码,如果它在您的上下文中是安全的,请记住一些事情。)
关于java - 如何使用 groupBy 计算出现次数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25441088/