count()是stream的终结操作,返回long型元素总数,调用后流关闭不可复用;可直接统计或结合filter条件计数,但需避免重复调用、大数据量遍历及替代size()等低效用法。

Java 中 Stream 的 count() 方法用于统计流中元素的总数,它是一个**终结操作(terminal operation)**,返回 long 类型结果,调用后流会关闭,不可复用。
基本用法:直接调用 count()
对任意流(如集合、数组、范围等)调用 count() 即可获取元素个数:
-
// 从 List 创建流并统计
List<string> list = Arrays.asList("a", "b", "c");<br> long size = list.stream().count(); // 结果为 3</string> -
// 使用 IntStream.range 统计范围元素个数
long n = IntStream.range(1, 10).count(); // 1 到 9(不含10),结果为 9
结合过滤条件统计(常用场景)
常与 filter() 配合,实现带条件的计数,比如统计满足某条件的元素数量:
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
-
// 统计字符串长度大于 2 的元素个数
List<string> words = Arrays.asList("hi", "hello", "ok", "world");<br> long count = words.stream()<br> .filter(s -> s.length() > 2)<br> .count(); // 结果为 2("hello", "world")</string> -
// 统计偶数个数
int[] nums = {1, 2, 3, 4, 5, 6};<br> long evenCount = Arrays.stream(nums)<br> .filter(n -> n % 2 == 0)<br> .count(); // 结果为 3
注意点和常见误区
count() 虽简洁,但需注意以下细节:
- 流只能消费一次,重复调用
count()会抛出IllegalStateException;如需多次统计,应重新创建流 - 对于大型数据源(如超大集合或无限流),
count()会遍历全部元素,性能取决于数据量,不适用于实时性要求极高的场景 - 若只是想判断是否为空,优先用
findAny().isPresent()或!stream.iterator().hasNext(),比count() != 0更高效 - 不能替代
Collection.size()—— 对于ArrayList等支持 O(1) 大小查询的集合,直接调用size()更快且无需创建流
替代方案:避免不必要的 count
有些需求看似要“统计”,实则只需逻辑判断,可跳过 count() 提升效率:
-
// ❌ 不推荐:为判断是否存在而 count
if (list.stream().filter(...).count() > 0) { ... } -
// ✅ 推荐:用 anyMatch 更清晰高效
if (list.stream().anyMatch(...)) { ... } -
// ✅ 需要首个匹配项时,用 findFirst
Optional<string> first = list.stream().filter(...).findFirst();</string>
大量免费API接口:立即使用
涵盖生活服务API、金融科技API、企业工商API、等相关的API接口服务。免费API接口可安全、合规地连接上下游,为数据API应用能力赋能!










