Stream<T> filter(Predicate<? super T> predicate);其中T和?代表的含义
时间: 2023-05-20 10:06:28 浏览: 94
Stream<T> 是一个泛型类,表示一个元素类型为 T 的流。filter 方法接受一个 Predicate<? super T> 参数,该参数表示一个函数接口,用于判断流中的元素是否符合条件。其中 T 表示流中的元素类型,? super T 表示该函数接口可以接受 T 类型或 T 的父类作为参数。该方法返回一个新的流,其中包含符合条件的元素。
相关问题
Predicate<? super T> predicate怎么用,举个例子可以吗
当我们使用 Predicate<? super T> predicate 时,我们可以使用它来过滤集合中的元素。下面是一个例子:
假设我们有一个 Animal 类,它有一个属性 age,我们想要从一个 Animal 集合中过滤出年龄大于等于 5 的 Animal 对象,可以这样写:
List<Animal> animals = new ArrayList<>();
animals.add(new Animal("cat", 3));
animals.add(new Animal("dog", 6));
animals.add(new Animal("lion", 8));
Predicate<Animal> agePredicate = animal -> animal.getAge() >= 5;
List<Animal> filteredAnimals = animals.stream()
.filter(agePredicate)
.collect(Collectors.toList());
在这个例子中,我们使用了 Predicate<Animal> 来过滤 Animal 集合中的元素,其中 agePredicate 是一个 Lambda 表达式,它接受一个 Animal 对象并返回一个 boolean 值,表示这个 Animal 对象是否符合我们的过滤条件。
最后,我们使用了 Java 8 中的 Stream API 来对 Animal 集合进行过滤,并将过滤后的结果收集到一个新的 List 中。
Predicate<? super E> filter 创建举例
`Predicate<? super E>` 是Java 8引入的一种函数式接口,用于对集合或其他数据源中的元素进行过滤操作。这个接口只有一个抽象方法 `test(E)`,接受一个类型的输入参数 `E` 并返回一个布尔值,表示该元素是否满足特定条件。`super E` 表示泛型通配符,意味着它可以匹配 `E` 或者 `E` 的任意超类。
例如,如果你有一个整数列表 `List<Integer>`,你可以使用 `Predicate` 来创建一个只包含偶数的过滤器:
```java
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
public class FilterExample {
public static void main(String[] args) {
List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5, 6);
// 使用 Predicate 创建一个过滤偶数的条件
Predicate<Integer> isEven = number -> number % 2 == 0;
// 使用 filter 方法应用这个过滤器到 numbers 列表上
List<Integer> evenNumbers = numbers.stream()
.filter(isEven)
.collect(Collectors.toList());
System.out.println(evenNumbers); // 输出 [2, 4, 6]
}
}
```
在这个例子中,`isEven` 就是一个 `Predicate<? super Integer>` 实例,它过滤出列表中的偶数部分。
阅读全文