Java8如何从一个Stream中过滤null值

Java 8提供了一个Stream API,它可以让开发人员处理具有状态的集合。其中一个常见的问题是如何从Stream中过滤掉null值,下面是具体步骤和示例说明:

1. 使用filter()方法过滤null值

Stream的filter()方法可以用于过滤掉Stream中的元素,只留下满足指定条件的元素。具体可以通过Lambda表达式实现。要过滤null值,只需要用Objects.nonNull()方法作为filter()的参数进行判断就可以了。

示例一:

List<String> list = Arrays.asList("John",null,"Marry","Tom",null,"Mike");
List<String> filterList = list.stream().filter(Objects::nonNull).collect(Collectors.toList());
System.out.println(filterList);   // [John, Marry, Tom, Mike]

上述代码中,将字符串数组转换成List对象,然后使用filter()方法去除null值。这里使用了方法引用的形式,即过滤条件为Objects::nonNull,表示将null值过滤掉。最后使用Collectors.toList()方法将Stream转换成List对象进行输出。

示例二:

List<Integer> nums = Arrays.asList(1, 2, 3, null, 4, 5, null, 6, null);
long count = nums.stream().filter(Objects::nonNull).count();
System.out.println(count);   // 6

上述代码中,将数字数组转换成List对象,然后使用filter()方法去除null值。同样,使用了方法引用的形式,即过滤条件为Objects::nonNull。然后使用count()方法统计剩余元素的数量。

2. 使用flatMap()方法过滤null值

使用flatMap()方法也可以对Stream中的元素进行过滤,只不过需要先将Stream中的嵌套对象展开成单层对象,然后再过滤掉null值。具体可以通过Lambda表达式和Optional容器类实现。

示例三:

List<List<String>> lists = new ArrayList<>();
lists.add(Arrays.asList("John","Mike"));
lists.add(Arrays.asList(null,"Tom","Marry"));
lists.add(Arrays.asList("Jerry",null,"Sophie"));

List<String> results = lists.stream()
    .flatMap(Collection::stream)
    .filter(Optional::isPresent)
    .map(Optional::get)
    .collect(Collectors.toList());

System.out.println(results);   // [John, Mike, Tom, Marry, Jerry, Sophie]

上述代码中,首先将字符串数组嵌套在List对象中,然后使用flatMap()方法将嵌套的子集合展开成单层对象,之后使用filter()方法和Optional容器类来过滤掉null值。最后使用Collectors.toList()方法将Stream转换成List对象进行输出。

总之,这两种方式均可解决Stream中的null值过滤,选择合适的方式取决于具体情况。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Java8如何从一个Stream中过滤null值 - Python技术站

(0)
上一篇 2023年6月3日
下一篇 2023年6月3日

相关文章

  • Python中的嵌套循环详情

    下面是针对“Python中的嵌套循环详情”的完整攻略: 什么是嵌套循环? 在Python中,如果我们需要对一个数据集中的每一个元素都执行某个操作,可以使用for循环来完成。而如果这个数据集中每个元素又是一个数据集,那就需要使用嵌套循环来完成双重迭代的任务。 嵌套循环简单来说就是在一个循环内部再嵌套其他的循环。在每次外部循环执行时,内部循环都会执行一轮,直到内…

    python 2023年6月5日
    00
  • python deque模块简单使用代码实例

    当我们在Python中需要实现简单的队列或双向队列数据结构时,可以使用Python的deque模块。本文将详细讲解Python deque模块的简单使用代码实例,并提供两个示例来说明使用deque的好处。 什么是Python deque模块? deque模块是Python标准库 collections 中的一个子模块,提供了一个双向队列的数据结构,支持高效的…

    python 2023年6月3日
    00
  • Python 程序报错崩溃后如何倒回到崩溃的位置(推荐)

    Python程序报错崩溃后如何倒回到崩溃的位置(推荐)攻略 在Python中,当程序出现错误时,程序会崩溃并停止执行。如果我们想要倒回到崩溃的位置,我们可以使用Python的调试工具来实现。本攻略将介绍如何使用Python程序报错崩溃后如何倒回到崩溃的位置,并提供两个示例。 解决方法 在Python中解决程序报错崩溃后如何倒回到崩溃的位置,我们可以尝试以下方…

    python 2023年5月13日
    00
  • python数据分析之将爬取的数据保存为csv格式

    在Python中,我们可以使用pandas库将爬取的数据保存为csv格式。本攻略将介绍如何使用pandas库将爬取的数据保存为csv格式,并提供两个示例。 1. 使用pandas库将数据保存为csv格式 使用pandas库可以将数据保存为csv格式。以下是一个示例代码,演示如何使用pandas库将数据保存为csv格式: import pandas as pd…

    python 2023年5月15日
    00
  • Python寻找路径和查找文件路径的示例

    下面是详细的Python寻找路径和查找文件路径的攻略。 什么是路径? 在计算机中,所有的文件和文件夹都存储在某个位置。而这个位置就是它们的路径。路径分为相对路径和绝对路径。相对路径是相对于当前文件的路径,而绝对路径则是从根目录开始的完整路径。 如何寻找路径? 在Python中,我们可以使用os模块中的os.path子模块来寻找路径。 示例1:获取当前工作目录…

    python 2023年6月3日
    00
  • Python3查找列表中重复元素的个数的3种方法详解

    Python3查找列表中重复元素的个数的3种方法详解 在Python中,有多种方法可以查找列表中重复元素的个数。本文将介绍3种常用的方法,包括使用Counter()函数、使用set()函数和使用字典。下面将详细讲解这3种方法的实现原理和使用方法。 使用Counter()函数 Counter()函数是Python中的一个内置函数,用于统计列表中元素的个数。Co…

    python 2023年5月13日
    00
  • Python列表删除元素del、pop()和remove()的区别小结

    Python列表删除元素del、pop()和remove()的区别小结 在Python中,列表是一种常见的数据类型,它允许我们存储多个值。在使用列表时,我们经常需要删除其中的元素。Python提供了三种方法来删除列表中的元素:del、pop()和remove()。本攻略将详细讲解这三种方法的区别。 del del是Python中的一个关键字,可以用来删除列表…

    python 2023年5月13日
    00
  • 解决python打不开文件(文件不存在)的问题

    当在Python中打开文件时,可能会遇到文件不存在的问题。这可能是由于文件路径错误、文件名错误或文件确实不存在等原因导致的。下面是一个完整攻略,详细讲解如何解决Python打不开文件(不存在)的问题,包括检文件路径、检查文件名和两个示例说明。 1. 检查路径 在Python中,打开文件时,必须指定正确的文件路径。如果文件路径不正确,Python将无法找到文件…

    python 2023年5月14日
    00
合作推广
合作推广
分享本页
返回顶部