在 Java 中,Lambda 表达式结合 Stream API 可以很方便地使用 filter
操作进行集合的过滤。我将为你提供三种常见的实现方式,包括步骤流程和示例代码。
假设我们有一个包含一些整数的列表,我们想要过滤出所有的偶数。
List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);
这是最基本的方式,使用 Stream 的 filter
方法来过滤列表中的元素。
步骤流程:
filter
方法传入一个 Lambda 表达式,该表达式决定了哪些元素会被保留下来。collect
方法将 Stream 转换回 List。示例代码:
List<Integer> evenNumbers = numbers.stream()
.filter(number -> number % 2 == 0)
.collect(Collectors.toList());
你可以通过实现 Predicate
接口创建一个自定义的过滤条件,并在 filter
方法中使用它。
步骤流程:
Predicate
接口的类,重写 test
方法来定义过滤条件。filter
方法传入该自定义的 Predicate
实例。示例代码:
import java.util.function.Predicate;
public class EvenNumberPredicate implements Predicate<Integer> {
@Override
public boolean test(Integer number) {
return number % 2 == 0;
}
}
// 在使用时
List<Integer> evenNumbers = numbers.stream()
.filter(new EvenNumberPredicate())
.collect(Collectors.toList());
Google Guava 是一个流行的 Java 库,它提供了一些功能强大的集合操作,包括过滤。
步骤流程:
Collections2.filter
方法传入一个 Predicate 来过滤集合。Maven 依赖:
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>30.1.1-jre</version>
</dependency>
Gradle 依赖:
implementation 'com.google.guava:guava:30.1.1-jre'
示例代码:
import com.google.common.base.Predicate;
import com.google.common.collect.Collections2;
// 在使用时
Predicate<Integer> evenPredicate = new Predicate<Integer>() {
@Override
public boolean apply(Integer number) {
return number % 2 == 0;
}
};
Collection<Integer> evenNumbers = Collections2.filter(numbers, evenPredicate);
这些是使用 Lambda 表达式和 Stream API 进行过滤的几种常见方式,每种方式都有其适用的场景和优劣势。选择合适的方式取决于你的项目需求和偏好。