Java Stream 过滤null

Java Stream 是自 Java 8 引入的一种强大的处理集合数据的方式。通过使用 Stream,我们可以以一种更简洁、更灵活的方式对集合中的元素进行操作和处理。在实际应用中,我们经常需要过滤掉集合中的 null 值,因为 null 值往往会导致空指针异常。本文将介绍如何使用 Java Stream 过滤掉 null 值,同时提供代码示例。

什么是 Java Stream

Java Stream 是一个顺序的元素集合,它支持顺序和并行处理。Stream 不是一个数据结构,而是对数据结构进行操作的一种方式。它可以执行非常复杂的查找、过滤和映射等操作。Stream API 使用高阶函数(higher-order functions)和 lambda 表达式的方式来实现这些操作,可以大大简化代码的编写。

在 Java 中,Stream 是 java.util.stream.Stream 接口的实例。它可以通过集合或数组创建,并可以通过一系列的中间操作(intermediate operations)和终端操作(terminal operations)进行处理。

过滤null值的方法

在使用 Java Stream 进行数据处理时,经常需要过滤掉集合中的 null 值。下面介绍两种常用的过滤 null 值的方法。

1. 使用 filter 方法

Java Stream 提供了 filter 方法,它可以根据指定的条件过滤集合中的元素。我们可以使用 filter 方法结合 lambda 表达式来过滤掉 null 值。

以下是一个示例代码:

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

public class FilterNullExample {
    public static void main(String[] args) {
        List<String> list = Arrays.asList("apple", null, "banana", null, "cherry");
        
        List<String> filteredList = list.stream()
                .filter(element -> element != null)
                .collect(Collectors.toList());
        
        System.out.println(filteredList);
    }
}

在上面的示例中,我们首先创建了一个包含 null 值的字符串列表。然后使用 list.stream() 将该列表转换为 Stream 对象。接下来,我们使用 filter 方法结合 lambda 表达式 element -> element != null 来过滤掉 null 值,最后使用 collect(Collectors.toList()) 将过滤后的元素收集到一个新的列表中。最终,我们打印出过滤后的列表。运行上述代码,将会输出 ["apple", "banana", "cherry"]

2. 使用 Objects.requireNonNull 方法

如果我们不想使用 lambda 表达式来过滤 null 值,还可以使用 Java 提供的 Objects.requireNonNull 方法。该方法接受一个对象作为参数,如果该对象为 null,则会抛出一个 NullPointerException 异常。

以下是一个示例代码:

import java.util.Arrays;
import java.util.List;
import java.util.Objects;
import java.util.stream.Collectors;

public class RequireNonNullExample {
    public static void main(String[] args) {
        List<String> list = Arrays.asList("apple", null, "banana", null, "cherry");
        
        List<String> filteredList = list.stream()
                .filter(Objects::nonNull)
                .collect(Collectors.toList());
        
        System.out.println(filteredList);
    }
}

在上面的示例中,我们首先创建了一个包含 null 值的字符串列表。然后使用 list.stream() 将该列表转换为 Stream 对象。接下来,我们使用 filter 方法结合 Objects::nonNull 方法引用来过滤掉 null 值,最后使用 collect(Collectors.toList()) 将过滤后的元素收集到一个新的列表中。最终,我们打印出过滤后的列表。运行上述代码,将会输出 ["apple", "banana", "cherry"]

总结

通过使用 Stream API,我们可以以一种更简洁、更灵活的方式对集合中的元素进行操作和处理。在实际应用中,经常需要过滤掉集合中的 null 值,以避免空指针异常。本文介绍了两种常用的过滤 null 值的方法:使用 filter 方法结合 lambda 表达式,以及