在java stream的filter中使用lambda表达式,只需将条件逻辑直接写在`filter()`方法的参数中,它会接收流中的每个元素并返回一个布尔值来决定是否保留该元素。例如,调用`stream.filter(item -> item > 10)`即可过滤出大于10的元素。如果条件涉及多个判断或复杂对象属性,可以使用逻辑运算符组合lambda表达式,或者提取为方法引用以提高可读性。

如何根据对象属性进行过滤
当处理对象集合时,可以通过Lambda访问对象的getter方法来筛选特定属性的数据。比如从用户列表中找出年龄大于18的用户,使用`u -> u.getAge() > 18`作为过滤条件。这种方式非常直观,且能保持代码的紧凑性。

import java.util.*;
import java.util.stream.*;
class User {
String name;
int age;
User(String n, int a) { name = n; age = a; }
}
public class Main {
public static void main(String[] args) {
List<User> users = Arrays.asList(
new User("Alice", 17),
new User("Bob", 20),
new User("Charlie", 15)
);
List<String> adults = users.stream()
.filter(u -> u.age > 18)
.map(u -> u.name)
.collect(Collectors.toList());
System.out.println(adults); // [Bob]
}
}
如何处理空值或复杂条件
在处理可能包含null值的流时,直接在Lambda中进行属性访问会抛出NullPointerException。此时需要在Lambda内部增加非空判断,或者在过滤前使用`Objects.nonNull()`辅助方法。对于多条件过滤,可以在Lambda体内使用if-else结构或组合多个布尔表达式来实现。
立即学习“Java免费学习笔记(深入)”;

import java.util.*;
import java.util.stream.*;
class Item {
String code;
Integer price;
Item(String c, Integer p) { code = c; price = p; }
}
public class Main {
public static void main(String[] args) {
List<Item> items = Arrays.asList(
new Item("A", 100),
new Item("B", null),
new Item("C", 50)
);
List<String> validItems = items.stream()
.filter(i -> i != null && i.price != null && i.price > 60)
.map(i -> i.code)
.collect(Collectors.toList());
System.out.println(validItems); // [A]
}
}


















