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

yizhihongxing

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中reduce()函数的使用方法示例

    下面是Python中reduce()函数的使用方法示例攻略: 什么是reduce()函数? reduce()函数是Python内置的高阶函数,其作用是将一个函数作用在一个序列上,这个函数必须接收两个参数,reduce()依次将序列中的元素和上一次的调用结果传递给这个函数,最终得到一个结果。 reduce()函数的基本语法 reduce(function, i…

    python 2023年6月5日
    00
  • python输入多行字符串的方法总结

    Python是一种高级编程语言,很适合用于处理字符串。在处理字符串时,有时候需要读取多行输入,而输入的内容可能是相对较长的一段文本。本文将总结Python中输入多行字符串的几种方式。 方法一:使用三引号 在Python中,可以使用三个引号(单引号或双引号)来表示一段文本,在这段文本中可以包含多行。 代码示例 text = ”’这是第一行 这是第二行 这是第…

    python 2023年6月5日
    00
  • 使用pytorch时所遇到的一些问题总结

    以下是关于使用PyTorch时所遇到的一些问题总结的完整攻略: 问题描述 在使用PyTorch进行深度学习时,可能会遇到一些常见的问题。这些问题可能涉及到PyTorch的安装、模型训练、数据加载等方面。了解这些问题及其解决方法可以帮助我们更好地使用PyTorch进行深度学习。 解决方法 可以使用以下步骤解决使用PyTorch时所遇到的一些问题: 安装PyTo…

    python 2023年5月13日
    00
  • 跟老齐学Python之坑爹的字符编码

    跟老齐学Python之坑爹的字符编码 什么是字符编码 字符编码(Character Encoding)是一种将字符集中的字符转换为二进制数据的过程,使得计算机能够识别和处理文本。在计算机中,所有的数据都是以二进制形式存储和处理的,因此文本数据也需要被转换为二进制数据表示。常见的字符编码包括ASCII、GB2312、UTF-8等。 坑爹的字符编码问题 在字符编…

    python 2023年5月20日
    00
  • Python读取一个目录下所有目录和文件的方法

    当我们想要读取一个目录下的所有目录和文件时,可以使用Python内置的os库。 步骤如下: 1. 引入os库 首先,需要在代码开头引入os库: import os 2. 获取目录信息 然后,可以使用os库中的listdir()函数获取目标目录中的所有目录和文件的名称列表: path = ‘目标目录绝对路径’ files = os.listdir(path) …

    python 2023年6月5日
    00
  • python3.6.3+opencv3.3.0实现动态人脸捕获

    Python3.6.3 + OpenCV3.3.0 实现动态人脸捕获 准备工作 在开始之前,我们需要准备一些必要的工具和环境:- Python3.6.3- OpenCV3.3.0- 摄像头设备(PC自带或USB摄像头) 安装Python3.6.3和OpenCV3.3.0 如果你还没有安装Python3和OpenCV,可以参考以下步骤: 安装Python3.6…

    python 2023年5月18日
    00
  • 如何在Python中进行元编程?

    Python是一门具有元编程特性的语言,既允许运行时对自身进行修改,也允许程序在运行时创建新的代码。本文将介绍如何在Python中进行元编程,并包含两个示例说明。 1. 动态创建类 在Python中,类也是对象,其可以在运行时动态创建。下面是一个简单的例子,演示如何使用type()函数创建类。 class Person: name = "Tom&q…

    python 2023年4月19日
    00
  • Python实现提取文章摘要的方法

    Python实现提取文章摘要的方法 提取文章摘要是一种常见的文本处理任务,可以帮助我们快速了解文章的主要内容。在本攻略中,我们将介绍如何使用Python实现提取文章摘要,并提供一些示例。 步骤1:获取文章内容 在提取文章摘要之前,我们需要获取文章内容。我们可以使用requests库获取网页内容,也可以使用其他库获取本地文件内容。 以下是一个示例,用于获取网页…

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