java stream 过滤
时间: 2023-10-24 14:09:23 浏览: 45
如何实现?
Java Stream 提供了 filter() 方法来实现过滤。该方法接受一个 Predicate 对象作为参数,用于筛选出符合条件的元素。例如,以下代码可以筛选出 list 中所有大于 5 的元素:
List<Integer> list = Arrays.asList(1, 2, 5, 6, 7, 9);
List<Integer> filteredList = list.stream().filter(x -> x > 5).collect(Collectors.toList());
在上面的代码中,filter() 方法返回一个 Stream 对象,然后可以通过 collect() 方法将其转换为 List 集合,最终得到 filteredList。
相关问题
Java Stream 过滤条条件多个
在 Java Stream 中,可以使用多个条件来进行过滤,可以使用 `filter()` 方法来实现。下面是一个示例:
假设我们有一个 `Person` 类,其中包含 `String name`、`int age` 和 `String gender` 三个属性。
```
public class Person {
private String name;
private int age;
private String gender;
public Person(String name, int age, String gender) {
this.name = name;
this.age = age;
this.gender = gender;
}
public String getName() {
return name;
}
public int getAge() {
return age;
}
public String getGender() {
return gender;
}
}
```
我们现在需要对一个 `List<Person>` 进行过滤,筛选出年龄大于等于 18 岁且性别为女性的人。可以使用以下代码:
```
List<Person> persons = new ArrayList<>();
// 添加数据到 persons 列表中
List<Person> filteredPersons = persons.stream()
.filter(person -> person.getAge() >= 18) // 过滤出年龄大于等于 18 岁的人
.filter(person -> "female".equals(person.getGender())) // 过滤出性别为女性的人
.collect(Collectors.toList());
```
上面的代码中,使用了两个 `filter` 方法,分别过滤出年龄大于等于 18 岁和性别为女性的人。最后使用 `collect()` 方法将符合条件的人收集到一个新的列表中。
可以根据实际需求,使用更多的 `filter` 方法来实现多重条件过滤。
java stream 过滤有空属性字段的数组
假设你有一个包含对象的数组,每个对象有多个属性,包括可能为空的属性。你可以使用 Java 8 的 Stream API 进行过滤,只保留那些不含有空属性的对象。
示例代码如下:
```java
YourObject[] objects = ... ; // 假设你已经有了对象数组
List<YourObject> filteredObjects = Arrays.stream(objects)
.filter(obj -> obj.getProperty1() != null && obj.getProperty2() != null && obj.getProperty3() != null)
.collect(Collectors.toList());
```
这个示例中,我们首先将数组转换为一个 Stream 对象,然后使用 `filter()` 方法过滤掉那些至少有一个属性为空的对象。在这个例子中,我们假设每个对象都有三个属性,分别是 `getProperty1()`、`getProperty2()` 和 `getProperty3()`。如果你有更多或更少的属性,只需要在过滤条件中相应地添加或删除属性即可。
最后,我们使用 `collect()` 方法将过滤后的对象收集到一个新的 List 中。