最推荐使用 Stream.filter() 创建新列表,不修改原集合且逻辑清晰;若需就地修改,则用 removeIf() 方法,内部线程安全。

Java 中过滤 ArrayList 不符合条件的数据,最常用、推荐的方式是使用 Stream API(JDK 8+),简洁安全且不修改原集合;若需就地修改原列表,可用 Iterator.remove() 或 removeIf() 方法。
用 Stream.filter() 创建新列表(推荐)
这是函数式、不可变的写法,适合大多数场景:不改动原始数据,逻辑清晰,支持链式操作。
- 调用
list.stream().filter(条件).collect(Collectors.toList()) - 条件用 Lambda 表达式,例如:过滤出长度大于 3 的字符串
ArrayList<string> list = new ArrayList(Arrays.asList("a", "hello", "hi", "world"));
ArrayList<string> filtered = (ArrayList<string>) list.stream()
.filter(s -> s.length() > 3)
.collect(Collectors.toList()); // ["hello", "world"]
</string></string></string>
注意:collect(Collectors.toList()) 返回的是 ArrayList 的父类 List,如需强转为 ArrayList,需确保底层实现支持(通常没问题),或用 Collectors.toCollection(ArrayList::new) 更稳妥。
用 removeIf() 直接修改原列表
如果明确要删除原集合中不符合条件的元素,removeIf() 是最简方式,内部已做并发安全处理,无需手动遍历。
- 传入 Predicate,返回 true 的元素会被移除
- 等价于“保留满足条件的”,所以逻辑要取反
list.removeIf(s -> s.length()
⚠️ 注意:不能在 for-each 循环中直接调用 remove(),否则抛 ConcurrentModificationException。
用 Iterator 遍历并删除(兼容老版本 JDK)
适用于必须用 JDK 7 或更早版本的场景,或需要在遍历时做复杂判断和操作。
- 获取
Iterator,用it.hasNext()+it.next()遍历 - 满足删除条件时,只允许调用
it.remove()
remove()
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











