Java Stream是Java 8引入的一个强大的功能,它提供了一种简洁高效的方式来操作集合和数组。Stream提供了丰富的方法来处理数据,其中之一就是filter方法。filter方法用于过滤Stream中的元素,根据指定的条件保留或删除元素。本文将介绍如何使用Java Stream的filter方法进行多条件过滤,并提供了一些代码示例。

什么是Java Stream

Java Stream是一个用于处理集合和数组的工具类,它提供了一种函数式编程的方式来操作数据。Stream可以看作是一种数据流,可以对数据进行过滤、映射、排序等操作。使用Stream可以简化代码,提高代码的可读性和可维护性。

Java Stream的基本用法

在使用Java Stream之前,首先需要把集合或数组转换为Stream对象。可以通过Collection接口的stream()方法或Arrays类的stream()方法来实现。下面是一个简单的示例代码:

List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);
Stream<Integer> stream = numbers.stream();

上述代码将一个包含整数的List转换为了Stream对象。

接下来,就可以使用Stream的各种方法对数据进行处理了。filter方法是Stream的一个重要方法,它用于过滤Stream中的元素。filter方法接收一个Predicate函数式接口作为参数,用于指定过滤条件。只有满足条件的元素才会被保留,其他元素将被丢弃。

下面是filter方法的基本用法示例:

List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);
Stream<Integer> stream = numbers.stream();
Stream<Integer> filteredStream = stream.filter(number -> number % 2 == 0);

上述代码中,使用filter方法过滤出了所有偶数。通过lambda表达式number -> number % 2 == 0指定了过滤条件,即保留所有能够被2整除的元素。

多条件过滤

有时候我们需要根据多个条件来过滤数据。Java Stream提供了多种方式来实现多条件过滤。

使用多个filter方法

最简单的方式就是使用多个filter方法,每个filter方法指定一个条件。下面是一个示例代码:

List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);
Stream<Integer> stream = numbers.stream();
Stream<Integer> filteredStream = stream.filter(number -> number % 2 == 0)
                                       .filter(number -> number > 2);

上述代码中,使用两个filter方法分别过滤出偶数和大于2的数。

使用Predicate接口的and方法

Java 8的Predicate接口提供了and方法,可以用于将多个条件合并成一个条件。下面是一个示例代码:

List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);
Stream<Integer> stream = numbers.stream();
Predicate<Integer> evenPredicate = number -> number % 2 == 0;
Predicate<Integer> greaterThan2Predicate = number -> number > 2;
Stream<Integer> filteredStream = stream.filter(evenPredicate.and(greaterThan2Predicate));

上述代码中,使用and方法将两个条件合并为一个条件,然后传递给filter方法。

使用一个条件表达式

还可以使用一个条件表达式来实现多条件过滤。条件表达式由多个条件通过逻辑运算符组合而成。下面是一个示例代码:

List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);
Stream<Integer> stream = numbers.stream();
Stream<Integer> filteredStream = stream.filter(number -> number % 2 == 0 && number > 2);

上述代码中,使用一个条件表达式实现了多条件过滤。

代码示例

下面是一个完整的示例代码,演示了如何使用Java Stream的filter方法进行多条件过滤:

import java.util.Arrays;
import java.util.List;
import java.util.stream.Stream;

public class FilterExample {
    public static void main(String[] args) {
        List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);
        Stream<Integer> stream = numbers.stream();