filter中匹配字段先判断是否为空 再进行过滤
时间: 2023-09-11 11:07:47 浏览: 226
在 JDK 8 的 Filter 接口中,可以使用 lambda 表达式实现匹配字段过滤并且先判断是否为空。下面是一个示例代码:
假设我们有一个 `Person` 类,其中包含 `name` 和 `age` 两个属性:
```java
public class Person {
private String name;
private int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public int getAge() {
return age;
}
}
```
现在我们有一个包含 `Person` 对象的列表,我们想要过滤出 `name` 字段不为空且年龄大于 18 的人,可以使用如下代码实现:
```java
List<Person> personList = Arrays.asList(
new Person("Tom", 20),
new Person("Mike", 16),
new Person("", 25),
new Person(null, 30)
);
List<Person> filteredList = personList.stream()
.filter(p -> p.getName() != null && !p.getName().isEmpty() && p.getAge() > 18)
.collect(Collectors.toList());
System.out.println(filteredList);
```
在上面的代码中,我们使用 `stream()` 方法将 `personList` 转换为一个流,并使用 `filter()` 方法过滤出 `name` 字段不为空且年龄大于 18 的人。在 `filter()` 方法中,我们使用 lambda 表达式 `p -> p.getName() != null && !p.getName().isEmpty() && p.getAge() > 18`,其中 `p` 表示流中的元素 `Person` 对象,`p.getName() != null && !p.getName().isEmpty()` 表示判断 `name` 字段是否不为空,`p.getAge() > 18` 表示判断年龄是否大于 18。最后使用 `collect()` 方法将过滤后的元素收集到一个列表中,并输出结果。
需要注意的是,在 lambda 表达式中,需要先判断 `name` 字段是否为 null 或空字符串,否则在调用 `isEmpty()` 方法时会抛出 `NullPointerException` 异常。
阅读全文