iterator本身不提供跳过方法,但可通过while循环+hasnext()/next()手动控制遍历,条件满足时continue跳过;for-each中用continue仅跳过处理而非避免next()调用;stream.filter()预过滤更推荐;remove()是删除而非跳过。

Java 中的 Iterator 本身不提供“跳过”某项的直接方法,但可以通过在循环中控制 next() 的调用时机,结合 hasNext() 和条件判断,实现逻辑上的“跳过”。关键在于:**不调用 next() 就不会消费当前元素**。
用 while 循环 + 条件判断跳过
这是最常用、最清晰的方式。不依赖 for-each(它会自动调用 next),而是手动控制迭代流程:
- 每次调用
hasNext()检查是否有下一个元素 - 如果有,调用
next()获取它 - 再判断该元素是否满足“要跳过”的条件;如果不满足(即要处理),才执行业务逻辑
示例:跳过所有偶数,只处理奇数
Iterator<integer> it = list.iterator();
while (it.hasNext()) {
Integer num = it.next();
if (num % 2 == 0) {
continue; // 跳过偶数,不执行后续处理
}
System.out.println("处理奇数:" + num); // 只对奇数操作
}</integer>
用 for-each 配合 continue(本质仍是跳过本轮)
for-each 底层仍用 Iterator,语法更简洁,适合“跳过”逻辑简单的情况:
- for-each 自动调用
next(),所以“跳过”只能发生在获取之后 - 用
continue跳过当前循环体剩余语句,效果等同于忽略该元素
注意:这不能避免调用 next(),但能阻止对它的处理。
for (Integer num : list) {
if (num
预过滤:用 Stream API(推荐用于复杂条件)
如果目标是“只遍历符合条件的元素”,更函数式、可读性更高的方式是先过滤再迭代:
-
stream().filter(...).forEach(...)语义明确:先筛,再处理 - 避免在循环体内做条件分支,逻辑分离更干净
- 支持链式操作,便于组合多个条件(如
filter(x -> x > 0).filter(x -> x % 2 == 1))
list.stream()
.filter(x -> x != null && x % 3 == 0) // 只保留非空且能被 3 整除的
.forEach(System.out::println);
注意 remove() 不等于跳过
有人误以为调用 it.remove() 是“跳过”,其实不是:
-
remove()是从集合中**删除**已遍历过的上一个元素,影响原集合 - 它不改变迭代器当前位置,下一次
next()仍会返回下一个元素(不是被删的那个) - 跳过 ≠ 删除;除非你确实需要修改原集合,否则不要用 remove 实现跳过
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











