Java 集合怎么过滤

在日常开发数据处理中,我们常需要从一堆杂乱的数据里挑出符合要求的内容——比如从全班成绩单里选出及格的同学、从电商订单里筛选出还未发货的订单,这时候“过滤”就是最常用的操作。很多用Java的新手刚接触集合过滤时,容易纠结用哪种方法更简单、更高效,其实只要结合场景选对方式,过滤集合完全不用复杂操作。

新手最常用:for循环遍历过滤

刚学Java的人,最先接触的肯定是for循环。这个方法就像我们整理书包时,把符合要求的东西挑出来,好理解也不会出错。比如我们有一个装水果的集合,想把“苹果”挑出来,代码可以这么写:

Java 集合怎么过滤

`java

// 先造一个装水果的集合

List<String> fruits = List.of("苹果", "香蕉", "苹果", "橙子");

// 准备一个新集合,放过滤后的结果

List<String> filtered = new ArrayList<>();

// 遍历原集合,把符合条件的加进去

for (String fruit : fruits) {

if ("苹果".equals(fruit)) {

filtered.add(fruit);

}

}

`

这种方法的好处是灵活,哪怕是复杂的判断逻辑(比如既要苹果又要红苹果)都能写,但缺点也明显:代码偏冗长,每次都要手动创建新集合、写循环,遇到大数据量时,手动操作的效率也不高。

简化代码:Stream API一行搞定

从Java 8开始新增的Stream API,就像给过滤装了个“自动分拣机”,不用手动写循环,一行代码就能完成过滤。还是用刚才的水果例子,代码可以简化成:

`java

List<String> filtered = fruits.stream()

.filter(fruit -> "苹果".equals(fruit)) // 过滤条件

.collect(Collectors.toList()); // 把结果转成集合

`

这个“自动分拣”的逻辑很直观:stream()把集合变成“数据流”,filter()里的就是我们的筛选规则(就像“只留苹果”),最后用collect()把筛选后的结果变回集合。如果是过滤对象集合,比如从学生列表里挑出成绩及格的学生,逻辑也一样:

`java

// 学生类

class Student { String name; int score; }

List<Student> students = List.of(new Student("张三", 58), new Student("李四", 85));

// 过滤及格学生

List<Student> passStudents = students.stream()

.filter(s -> s.score >= 60)

.collect(Collectors.toList());

`

Stream API的优势是代码简洁,而且对大数据量的处理效率更高,是现在开发中最常用的过滤方式。

特殊场景:用Collection自带的方法

如果过滤需求比较简单,比如要过滤掉集合里的空元素,不用Stream,直接用集合自带的方法更方便。比如ArrayList的removeIf()方法,就像“边整理边把不符合的东西扔掉”:

`java

List<String> fruitsWithNull = new ArrayList<>(List.of("苹果", null, "香蕉", null));

// 过滤掉null元素,直接修改原集合

fruitsWithNull.removeIf(Objects::isNull);

`

这个方法的好处是不用创建新集合,直接在原集合上修改,适合内存占用敏感的场景。

实际开发中,选哪种过滤方式,核心看两个点:需求复杂度和代码可读性。如果只是简单过滤,用removeIf()或者Stream的一行代码就够;如果是复杂的判断逻辑,用for循环反而更易维护。只要掌握这几种方法,Java集合过滤就会变成很顺手的操作,不用再为“怎么挑数据”发愁。

上一篇 C / C++ 从入门到进阶:掌握高性能系统开发的核心编程语言知识