Collectors.counting() 是 Java 8 引入的一个静态方法,它位于 java.util.stream.Collectors 类中。此方法用于创建一个收集器(Collector),该收集器的功能是计算流(Stream)中的元素数量。这是一个非常实用的方法,尤其是在对流进行聚合操作时,比如统计满足条件的元素数量。
基本用法示例
以下是如何使用 Collectors.counting() 的一个简单示例:
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
public class CountingExample {
public static void main(String[] args) {
// 创建一个字符串列表
List<String> words = Arrays.asList("apple", "banana", "cherry", "apple", "orange", "banana", "apple");
// 使用stream和Collectors.counting()来计算'apple'出现的次数
long appleCount = words.stream()
.filter(word -> word.equals("apple"))
.collect(Collectors.counting());
System.out.println("'apple' 出现的次数: " + appleCount);
}
}
在这个例子中,我们首先创建了一个包含多个字符串的列表。然后,我们通过调用 stream() 方法创建了一个流,接着使用 filter() 方法来筛选出所有的 “apple” 元素。最后,我们通过 collect() 方法配合 Collectors.counting() 来计算这些 “apple” 元素的数量,并将结果存储在一个 long 变量中。
注意事项
Collectors.counting() 返回的是一个 Collector 接口的实例,它适用于 Stream 的 collect() 方法。
这个方法是无状态的,意味着它不保留任何关于之前元素的信息,只关心元素的数量。
如果流为空,counting() 收集器会返回 0。
由于 counting() 返回的是长整型 (long) 计数,因此它可以处理非常大的集合而不会溢出(除非计数确实超过了 Long.MAX_VALUE)。