Java中使用Stream API的filter方法可对集合进行函数式过滤,返回满足条件的新集合。首先调用stream()方法获取流,接着通过filter()传入Predicate类型的Lambda表达式定义过滤条件,最后用collect()将结果收集为List、Set或数组等类型。例如可过滤字符串长度大于3的元素,或筛选年龄大于等于18的用户对象。支持组合多个条件,使用&&或拆分多个filter提升可读性。还能转换为Set去重或转为数组。原集合不变,始终返回新集合。掌握stream + filter + collect组合即可高效处理常见过滤需求。

在Java中,可以通过Stream API的filter方法对集合进行过滤,并返回一个新的集合。这种方式简洁、函数式,适用于List、Set等常见集合类型。
使用Stream.filter()过滤并收集结果
调用集合的stream()方法,然后使用filter()传入一个Lambda表达式定义过滤条件,最后通过collect()将结果转换为新的集合。
- filter接收一个Predicate(返回boolean的函数)作为参数
- 只有满足条件的元素才会保留在流中
- collect负责将流中的元素重新封装成List、Set等集合类型
示例:过滤出长度大于3的字符串
Listwords = Arrays.asList("java", "go", "rust", "c++", "python"); List result = words.stream() .filter(s -> s.length() > 3) .collect(Collectors.toList()); System.out.println(result); // 输出: [java, rust, python]
过滤对象集合
常用于根据对象属性进行筛选,比如过滤年龄大于18的用户。
立即学习“Java免费学习笔记(深入)”;
class User {
String name;
int age;
User(String name, int age) {
this.name = name;
this.age = age;
}
// getter方法
public int getAge() { return age; }
}
List users = Arrays.asList(
new User("Alice", 25),
new User("Bob", 17),
new User("Charlie", 30)
);
List adults = users.stream()
.filter(u -> u.getAge() >= 18)
.collect(Collectors.toList());
组合多个过滤条件
可以在filter中使用逻辑运算符组合多个条件。
Listresult = users.stream() .filter(u -> u.getAge() >= 18 && u.getName().startsWith("A")) .collect(Collectors.toList());
也可以拆分成多个filter调用,提高可读性:
Listresult = users.stream() .filter(u -> u.getAge() >= 18) .filter(u -> u.getName().length() > 4) .collect(Collectors.toList());
返回其他集合类型
除了List,还可以轻松转为Set或Array。
// 转为Set避免重复 Setunique = words.stream() .filter(s -> s.contains("a")) .collect(Collectors.toSet()); // 转为数组 String[] array = words.stream() .filter(s -> s.length() > 4) .toArray(String[]::new);
基本上就这些。只要掌握stream + filter + collect这个组合,就能高效处理大多数集合过滤场景。注意原集合不会被修改,返回的是全新集合。










