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实现二分法查找,并提供两个示例说明。 实现二分法查找 以下是使用Python实现二分法查找的代码: def binary_search(ar…

    python 2023年5月14日
    00
  • Python学习之模块化程序设计示例详解

    下面是关于“Python学习之模块化程序设计示例详解”的完整攻略。 一、什么是模块化程序设计? 模块化程序设计是将一个大型的程序分为若干个互不依赖的模块,每个模块实现某一特定的功能,在多人协作开发的时候有利于代码的管理和维护。 Python中,我们可以将一个.py文件看作是一个模块,通过import语句引入模块,然后使用其中的函数、类或者变量。 二、模块的定…

    python 2023年5月19日
    00
  • 基于python实现获取网页图片过程解析

    在Python中,我们可以使用requests库和BeautifulSoup库来获取网页图片。本文将介绍如何基于Python实现获取网页图片的过程解析。我们将提供两个示例,以帮助读者更好地理解如何实现这个目标。 步骤1:安装必要的库 在使用Python程序获取网页图片之前,我们需要安装必要的库。我们使用以下库: requests:用于发送HTTP请求和获取响…

    python 2023年5月15日
    00
  • python实现自动抢课脚本的示例代码

    下面我将介绍如何使用Python编写自动抢课脚本的攻略。 1. 环境准备 首先,我们需要在本地安装selenium库以实现自动化操作浏览器的功能。可以使用以下命令进行安装: pip install selenium 同时,我们还需要一个浏览器驱动程序,以便在Python中通过selenium库来控制浏览器进行页面操作。 在这里以Google Chrome为例…

    python 2023年5月19日
    00
  • Python和Pycharm 环境部署详细步骤

    下面是Python和Pycharm环境部署的详细步骤攻略。 环境部署步骤 1. 安装Python 首先,需要从Python官网下载相应的安装包进行安装。在网站主页(https://www.python.org/)可以看到“Downloads”按钮。点击“Downloads”按钮后,页面会自动跳转到下载页面。选择对应的操作系统,下载相应的Python版本的安装…

    python 2023年5月30日
    00
  • Python程序员面试题 你必须提前准备!(答案及解析)

    “Python程序员面试题你必须提前准备!(答案及解析)”是一篇关于Python程序员面试准备的文章,内容主要包括四个部分:基础知识题、算法题、常用模块题以及高级题。以下是详细的攻略: 基础知识题 这部分的考试内容主要涵盖Python的基础语法、数据类型、操作符等。以下列举几个常见的考试题目: 题目1:Python中的有哪些基本数据类型? 常见的数据类型包括…

    python 2023年5月14日
    00
  • python中使用%与.format格式化文本方法解析

    Python中使用%与.format格式化文本方法解析 在Python中,我们可以使用%和.format()两种方法来格式化文本。这两种方法都可以用于将变量的值插入到字符串中,以便生成新的字符串。下面我们将详细介绍这两种方法的使用方法。 使用%格式化文本 %是Python中的一种字符串格式化操作符,它可以将变量的值插入到字符串中。%的语法如下: string…

    python 2023年5月15日
    00
  • 在python中将list分段并保存为array类型的方法

    以下是详细讲解“在Python中将list分段并保存为array类型的方法”的完整攻略。 在Python中,可以使用array模块将list分段并保存为array类型。array模块提供了一种高效方式来处理数值数据,可以将数据储存在连续的内存块中,提高了数据访问的效率。本文将演示如何将list分段并保存为array类型。 将list分段 在Python中,可…

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