java - 如何使用 groupBy 计算出现次数?

标签 java functional-programming java-8

我想将流中的项目收集到一个映射中,该映射将相等的对象组合在一起,并映射到出现的次数。

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/

相关文章:

java - 使用 Streams 进行 ArrayList 迭代

java - Android - 找不到合适的构造函数

java - 我的数据库不支持创建的查询

scala - flatMap 功能签名(输入-> 输出)是否建议进行任何展平?

Java 8 循环使用 com.google.common.collect.Iterables.partition 的方法?

java - 使用 Java 8 流 API 和 lambda 操作 map

java - 如何从另一个类引用一个类中的方法(更多详细信息)

java - Java 1.7 中使用自定义 Popup 时 JMenuItem ActionListener 错过了鼠标单击

scala - 使用功能方式处理日志消息的最佳实践是什么

functional-programming - 如何在 OCaml 中查找数组元素的索引