过滤之道:Stream filter核心机制
Stream的filter方法是一个中间操作,它接收一个Predicate函数式接口作为参数,用于对流中的元素进行条件判断。只有满足条件的元素才会被保留到后续流中:
List<String> filteredList = list.stream()
.filter(s -> s.length() > 3) // 过滤长度大于3的字符串
.collect(Collectors.toList());
实战示例:多场景过滤应用
基础类型过滤:
// 过滤偶数
List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5, 6);
List<Integer> evens = numbers.stream()
.filter(n -> n % 2 == 0)
.collect(Collectors.toList());
// 结果: [2, 4, 6]
对象属性过滤:
// 过滤价格大于100的产品
List<Product> expensiveProducts = products.stream()
.filter(p -> p.getPrice() > 100)
.collect(Collectors.toList());
多条件组合过滤:
// 过滤长度在3-6之间且不以a开头的字符串
List<String> result = list.stream()
.filter(s -> s.length() >= 3 && s.length() <= 6)
.filter(s -> !s.startsWith("a"))
.collect(Collectors.toList());
性能优化与最佳实践
filter操作应尽可能放在流操作链的前端,这样可以减少后续操作的执行次数。对于复杂条件,使用方法引用可以提高代码可读性:
List<String> nonEmptyStrings = list.stream()
.filter(String::isEmpty)
.collect(Collectors.toList());
Stream filter不仅使代码更加简洁易读,还通过惰性求值和短路优化提升了处理效率,是现代Java编程中不可或缺的强大工具。
Java Stream Filter深度解析与实战
7万+

被折叠的 条评论
为什么被折叠?



