java arraylist 可以通过 stream api 的 filter() 方法过滤元素。具体做法是调用集合的 stream() 方法获取流,传入一个 predicate 函数式接口作为过滤条件,最后使用 collect(collectors.tolist()) 将结果收集回一个新的 list。此操作不会修改原集合,而是返回包含符合条件元素的新列表。

如何根据对象属性进行复杂过滤
当需要基于对象的多个属性或复杂逻辑进行过滤时,可以在 filter() 中编写更详细的判断逻辑。例如,过滤出年龄大于 18 且姓名不为空的用户。这种做法利用了 Lambda 表达式,能够灵活处理复杂的业务规则,同时保持代码的可读性。

import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
class User {
String name;
int age;
public User(String name, int age) { this.name = name; this.age = age; }
public String getName() { return name; }
public int getAge() { return age; }
}
public class Main {
public static void main(String[] args) {
List<User> users = new ArrayList<>();
users.add(new User("Alice", 20));
users.add(new User("Bob", 17));
users.add(new User(null, 25));
List<User> filtered = users.stream()
.filter(u -> u.getAge() > 18 && u.getName() != null)
.collect(Collectors.toList());
System.out.println(filtered); // [User{name='Alice', age=20}]
}
}
如何在不改变原列表的情况下获取过滤结果
Stream 的 filter() 操作是中间操作,它不会修改原始的 ArrayList。要获得最终结果,必须调用终端操作如 collect()。如果直接打印 stream 对象或使用未收集的流,将无法得到过滤后的列表。确保在链式调用的末尾使用 collect(Collectors.toList()) 来生成新的实例。
立即学习“Java免费学习笔记(深入)”;

import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
public class Main {
public static void main(String[] args) {
List<Integer> numbers = new ArrayList<>(List.of(1, 2, 3, 4, 5));
// 错误示范:不收集结果
// numbers.stream().filter(n -> n > 2);
// 正确做法:收集结果到新列表
List<Integer> result = numbers.stream()
.filter(n -> n > 2)
.collect(Collectors.toList());
System.out.println(numbers); // [1, 2, 3, 4, 5] (原列表不变)
System.out.println(result); // [3, 4, 5] (新列表)
}
}


















