stream流中filter实现多条件过滤查询
时间: 2023-05-14 10:06:29 浏览: 3675
可以使用 Java 8 中的 Stream API,结合 Predicate 和 filter 方法来实现多条件过滤查询。例如:
```
List<Person> persons = ... // 假设有一个 Person 类型的列表
Stream<Person> stream = persons.stream();
Predicate<Person> ageFilter = p -> p.getAge() > 18;
Predicate<Person> genderFilter = p -> p.getGender() == Gender.MALE;
stream.filter(ageFilter.and(genderFilter)).forEach(System.out::println);
```
上述代码中,我们定义了两个 Predicate,一个用于过滤年龄大于 18 岁的人,另一个用于过滤男性。然后我们使用 and 方法将两个 Predicate 组合起来,得到一个新的 Predicate,用于过滤同时满足两个条件的人。最后我们使用 filter 方法将这个 Predicate 应用到 Stream 中,得到一个新的 Stream,其中只包含满足条件的 Person 对象。最后我们使用 forEach 方法遍历这个新的 Stream,输出满足条件的 Person 对象。
相关问题
stream流filter多条件过滤
可以使用Java 8的Stream API中的filter方法,结合多个Predicate条件进行过滤,例如:
```java
List<String> list = Arrays.asList("apple", "banana", "cherry", "date", "eggfruit");
Predicate<String> startsWithC = str -> str.startsWith("c");
Predicate<String> lengthIs3 = str -> str.length() == 3;
List<String> filteredList = list.stream()
.filter(startsWithC.and(lengthIs3))
.collect(Collectors.toList());
System.out.println(filteredList); // Output: [cat]
```
这段代码会将列表中以字母"c"开头且长度为3的元素过滤出来。
stream流filter多条件过滤多种方式
可以使用Java 8中的Stream API,通过多次调用filter方法实现多条件过滤。例如:
```
List<Person> people = ... // 假设有一个Person对象的列表
List<Person> filteredPeople = people.stream()
.filter(p -> p.getAge() > 18) // 过滤出年龄大于18岁的人
.filter(p -> p.getGender() == Gender.MALE) // 过滤出男性
.filter(p -> p.getCity().equals("Shanghai")) // 过滤出住在上海的人
.collect(Collectors.toList()); // 将过滤后的结果转换为列表
```
除了使用多次filter方法,还可以使用Predicate接口实现多条件过滤。例如:
```
Predicate<Person> agePredicate = p -> p.getAge() > 18;
Predicate<Person> genderPredicate = p -> p.getGender() == Gender.MALE;
Predicate<Person> cityPredicate = p -> p.getCity().equals("Shanghai");
List<Person> filteredPeople = people.stream()
.filter(agePredicate.and(genderPredicate).and(cityPredicate))
.collect(Collectors.toList());
```
以上都是使用Lambda表达式实现的多条件过滤。如果不熟悉Lambda表达式,也可以使用匿名内部类实现。