Java中用Iterator统计集合满足条件的元素个数,需遍历+判断+计数;适合手动控制遍历(如边遍历边删除)或兼容老JDK;需注意空值检查和并发修改异常,单线程安全,多线程需同步或使用线程安全集合。

在 Java 中,用 Iterator 统计集合中满足某条件的元素个数,核心是遍历 + 判断 + 计数。它不依赖增强 for 循环或 Stream,适合需要手动控制遍历过程(比如边遍历边删除)或兼容老版本 JDK 的场景。
用 Iterator 遍历并累加计数
获取集合的 Iterator,调用 hasNext() 和 next() 逐个取元素,在循环体内判断条件是否成立,成立则计数器加一。
示例:统计 List<String> 中长度大于 3 的字符串个数:
List<String> list = Arrays.asList("a", "hello", "hi", "world", "");
Iterator<String> it = list.iterator();
int count = 0;
while (it.hasNext()) {
String s = it.next();
if (s != null && s.length() > 3) {
count++;
}
}
System.out.println(count); // 输出:2("hello" 和 "world")
封装成通用方法(支持任意条件)
为提升复用性,可定义一个接收 Predicate<T> 的静态方法,内部用 Iterator 实现判断逻辑。
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
立即学习“Java免费学习笔记(深入)”;
示例:
public static <T> long countIf(Iterable<T> iterable, Predicate<T> predicate) {
Iterator<T> it = iterable.iterator();
long count = 0;
while (it.hasNext()) {
if (predicate.test(it.next())) {
count++;
}
}
return count;
}
// 使用
List<Integer> nums = Arrays.asList(1, 5, 8, 2, 9);
long evenCount = countIf(nums, n -> n % 2 == 0); // 结果:2
注意空值与并发修改异常
Iterator 本身不自动处理 null,需在条件判断中显式检查;若遍历时集合被其他线程修改,会抛 ConcurrentModificationException。单线程下安全,多线程需同步或改用线程安全集合(如 CopyOnWriteArrayList)及其迭代器。
- 对可能含
null的集合,条件中先判空再操作 - 避免在遍历过程中调用集合自身的
add/remove方法(可用Iterator.remove()安全删除) - 若只需统计无需遍历控制,推荐用
Stream.filter().count()更简洁
对比其他方式的适用场景
Iterator 方式优势在于明确的遍历控制权和低内存开销(无中间流对象),适合简单统计或嵌入复杂遍历逻辑中。但代码略冗长;而 stream().filter().count() 更函数式、可读性强,JDK 8+ 推荐优先使用——除非有特殊需求必须用 Iterator。

















