Loading [MathJax]/jax/input/TeX/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >Java 从一个 List 中删除 null 元素

Java 从一个 List 中删除 null 元素

作者头像
HoneyMoose
发布于 2022-05-07 11:50:29
发布于 2022-05-07 11:50:29
97000
代码可运行
举报
文章被收录于专栏:CWIKIUSCWIKIUS
运行总次数:0
代码可运行

概述

本文章主要是为了展示如何从一个 List 列表中删除所有的 null 元素。

在本文中,我们使用了下面的几个实现:

  • Java
  • Guava
  • Apache Commons Collections
  • Java 8 提供的 lambda 表达式

使用纯 Java 来将 List 中的 null 元素删除

Java 中的 Collections 框架提供了一个简单的解决方案:

基于使用 while 循环将 List 列表中的所有空元素进行删除。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    @Test
    public void givenListContainsNulls_whenRemovingNullsWithPlainJava_thenCorrect() {
        final List<Integer> list = Lists.newArrayList(null, 1, null);
        while (list.remove(null));
        
        assertThat(list, hasSize(1));
    }

可选的,我们可以使用一个更加简单的方法,使用 list 中使用 removeAll 的方法来将 null 删除。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    @Test
    public void givenListContainsNulls_whenRemovingNullsWithPlainJavaAlternative_thenCorrect() {
        final List<Integer> list = Lists.newArrayList(null, 1, null);
        list.removeAll(Collections.singleton(null));

        assertThat(list, hasSize(1));
    }

需要注意的是,上面 2 个方法将会对输入的 List 进行修改。

在删除后得到的 list 是修改后的list

使用 Guava

我们还可以使用 Guava 的方法来进行 null 的查询和处理,这个需要通过 Java 的 predicates。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    @Test
    public void givenListContainsNulls_whenRemovingNullsWithGuavaV1_thenCorrect() {
        final List<Integer> list = Lists.newArrayList(null, 1, null);
        Iterables.removeIf(list, Predicates.isNull());

        assertThat(list, hasSize(1));
    }

如上面使用的代码,首先需要对 List 进行遍历,Iterables。List 对 Guava 来说是 Iterables。

然后使用 Predicates.isNull() 来进行判读。

如果为 NULL 就删除。

如果你不希望对输入的 List 进行修改的话,你可以使用 Guava 提供的 Iterables.filter 方法来进行遍历和处理。

如下面的代码,只需要将 removeIf 换成 filter 就可以了。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@Test
        final List<Integer> list = Lists.newArrayList(null, 1, null, 2, 3);
        final List<Integer> listWithoutNulls = Lists.newArrayList(Iterables.filter(list, Predicates.notNull()));

        assertThat(listWithoutNulls, hasSize(3));
}

使用 Apache Commons Collections

Apache Commons Collections 的使用和 Guava 的使用是类似的。

虽然 Apache Commons Collections 使用了 filter 方法,但是需要注意的,上面的方法会对输入的 List 进行修改。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    @Test
    public void givenListContainsNulls_whenRemovingNullsWithCommonsCollections_thenCorrect() {
        final List<Integer> list = Lists.newArrayList(null, 1, 2, null, 3, null);
        CollectionUtils.filter(list, PredicateUtils.notNullPredicate());

        assertThat(list, hasSize(3));
}

Java 8 Lambdas 表达式

Java 8 提供了 Lambdas 表达式来对 null 进行处理。

这个处理可以是并行的,也可以是序列进行的。

请查看下面的代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    @Test
    public void givenListContainsNulls_whenFilteringParallel_thenCorrect() {
        final List<Integer> list = Lists.newArrayList(null, 1, 2, null, 3, null);
        final List<Integer> listWithoutNulls = list.parallelStream().filter(Objects::nonNull).collect(Collectors.toList());

        assertThat(listWithoutNulls, hasSize(3));
    }

    @Test
    public void givenListContainsNulls_whenFilteringSerial_thenCorrect() {
        final List<Integer> list = Lists.newArrayList(null, 1, 2, null, 3, null);
        final List<Integer> listWithoutNulls = list.stream().filter(Objects::nonNull).collect(Collectors.toList());

        assertThat(listWithoutNulls, hasSize(3));
    }

    @Test
    public void givenListContainsNulls_whenRemovingNullsWithRemoveIf_thenCorrect() {
        final List<Integer> listWithoutNulls = Lists.newArrayList(null, 1, 2, null, 3, null);
        listWithoutNulls.removeIf(Objects::isNull);

        assertThat(listWithoutNulls, hasSize(3));
    }

使用上面的方法能够让你比较快速的将 List 中的 null 元素进行删除。

结论

在本文中,我们对 List 中的 Null 对象如何删除进行了一些探讨。

通过上面的一些方法能够让你在 Java 进行编程的时候快速删除 List 中的 null 元素。

https://www.ossez.com/t/java-list-null/13940

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-05-05,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Guava-1.19类Predicates
只要给定的参数是可序列化的,所有的方法返回可序列化的断言(predicates)。
悠扬前奏
2019/05/30
5690
Java 集合使用不当,Code Review 被 diss了!
有很多小伙伴在写代码的时候,有一些比较基础的问题没有考虑到,导致项目 Code Review 的时候被 diss。
Guide哥
2021/09/16
4980
震惊Guava竟然有"坑"
最近在几个技术交流群经常看到大家讨论开发行业内卷,什么是内卷呢?一句话,大家越来越努力,越来越累,但是幸福感和收获并没有增加,甚至实际上是下降了。
你呀不牛
2021/05/28
3830
Guava Predicate
本文介绍了Guava中Predicate的使用,包括用于过滤和匹配集合元素的Predicates,以及用于简化代码和减少冗余的Predicate封装。此外,还介绍了如何使用Predicates工具类将条件分支抽到Predicate中,以及如何使用Predicates.or聚合多个Predicate。最后,介绍了一个动态的评级配置表的实现,使用Predicate作为key,得到一个评级的配置表。
高爽
2017/12/28
6310
提升编程效率的利器: 解析Google Guava库之集合工具类-50个示例(八)
Guava库为Java的集合处理提供了一套全面且强大的工具类,极大地增强了Java集合框架的功能性和易用性。
公众号:码到三十五
2024/03/19
3940
这9个工具库让我的Java开发效率提升了80%
在 Java 语言的庞大体系中,有很多不错的工具类,能够大大提升我们的开发效率。但如果你不了解它们,就很可能会重复编写一些类似的代码。这不仅浪费时间,而且你写的可能还不如现有的好。今天,我决定和大家分享一些我经常使用的工具类,希望对你们有所帮助。
写bug的高哈哈
2025/01/04
580
这9个工具库让我的Java开发效率提升了80%
漫谈模式之过滤器模式
在有些场景中,需要对一个集合的对象进行过滤。比如,我有很多本书,想要知道价格为50元以上且出版社包含工业字样的书籍有哪些。简单实现一下:
孟君
2023/02/23
5220
漫谈模式之过滤器模式
Java常用工具类集合
或使用 com.ailk.org.apache.commons.lang3.StringUtils 工具类
Kevin_Zhang
2021/06/29
7010
常用工具类与commons 类库
commons: 一套开发源码、免费使用、商业友好的优秀API作为Java自带API的补充,大多数都是一些工具类
Yuyy
2022/06/28
1.4K0
Java8 Stream groupingBy对List进行分组
提到Group By,首先想到的往往是sql中的group by操作,对搜索结果进行分组。其实Java8 Streams API中的Collector也支持流中的数据进行分组和分区操作,本片文章讲简单介绍一下,如何使用groupingBy 和 partitioningBy来对流中的元素进行分组和分区。
全栈程序员站长
2022/09/24
4K0
Arrays.asList()使用指南
最近使用Arrays.asList()遇到了一些坑,然后在网上看到这篇文章:http://javadevnotes.com/java-array-to-list-examples 感觉挺不错的,但是还不是很全面而且是英文的。所以,自己对于这块小知识点进行了简单的总结
乔戈里
2019/07/19
4090
删除List中null的N种方法--最后放大招
Apache Commons CollectionUtils类提供了一个filter方法,该方法也可以解决我们的目的。传入的谓词将应用于列表中的所有元素:
FunTester
2020/05/04
4.5K0
怎么在在 Java 中对List进行分区
对于这个相对简单的操作,标准 Java 集合 API 竟然不支持它。幸运的是,Guava 和 Apache-Commons 都提供了对应的 API 。
闻说社
2024/07/30
1320
怎么在在 Java 中对List进行分区
【译】Google Guava 的 Table 接口介绍
在本教程中,我们将展示如何使用 Google Guava 的 Table 接口及其多个实现。 Guava 的 Table 是一种集合,表示包含行、列和相关单元格值的表结构,行和列充当有序的键对。
明明如月学长
2023/06/09
5730
Java 从一个 List 中删除重复的元素
在 Java 中删除 List 中重复元素的主要思路就是将 List 转换为 Set。
HoneyMoose
2022/05/02
9720
Java 从一个 List 中删除重复的元素
Java 把 Map 的值(Value)转换为 Array, List 或 Set
在这篇短文中,我们将会展示如何把 Map 中的值取出来,转换为一个 Array,、List 或者一个 Set。
HoneyMoose
2023/04/22
2.2K0
Java 把 Map 的值(Value)转换为 Array, List 或 Set
Google Guava 集合工具类
>注:懒视图意味着如果还没访问到某个iterable中的元素,则不会对它进行串联操作
架构探险之道
2019/07/25
1.1K0
Java批量更新太慢?多线程+List分段完美解决!
相信不少开发者在遇到项目对数据进行批量操作的时候,都会有不少的烦恼,尤其是针对数据量极大的情况下,效率问题就直接提上了菜板。
架构师修炼
2022/07/30
9700
Java批量更新太慢?多线程+List分段完美解决!
Java中List与Array的转换
    在Java项目开发过程中,集合之间的互相转换是非常常见的,其中两个比较典型的转换是List和Array之间的转换,本文主要介绍这二者之间的转换、其中存在的一些问题以及解决方案,本文JDK版本为1.8。
Tyan
2022/05/09
4450
吐血推荐17个提升开发效率的“轮子”
如果在我们的日常工作当中,能够将这些轮子用户,再配合一下idea的快捷键,可以极大得提升我们的开发效率。
苏三说技术
2022/08/25
6510
吐血推荐17个提升开发效率的“轮子”
相关推荐
Guava-1.19类Predicates
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文