前往小程序,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 删除。

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

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
ThinkPHP-视图的使用和渲染(三)
下面是一个简单的示例,演示了如何使用视图类来加载模板文件、传递变量数据、设置布局文件和输出页面内容。
堕落飞鸟
2023/05/02
3780
ThinkPHP-视图的使用和渲染(二)
在ThinkPHP中,我们可以使用layout方法来设置布局文件。layout方法需要传入布局文件的路径,例如:
堕落飞鸟
2023/05/02
6050
ThinkPHP-模板引擎的使用和语法(一)
ThinkPHP框架内置了一个功能强大的模板引擎,可以方便地将数据和模板结合起来生成HTML输出。模板引擎支持模板继承、模板布局、自定义标签等高级特性,可以大大提高模板的可维护性和重用性。本文将介绍ThinkPHP模板引擎的使用方法和语法。
堕落飞鸟
2023/05/02
9460
ThinkPHP-视图的定义和使用(二)
在视图中,可以使用$变量名的形式来访问控制器传递的变量。在示例中,我们在视图中使用了$users变量来显示用户数据。
堕落飞鸟
2023/05/02
2990
ThinkPHP-控制器的创建和使用
ThinkPHP是一个开源的PHP Web应用程序开发框架,它采用了MVC(Model-View-Controller)架构模式,是一个功能强大、易用性高、开发效率高的框架。
堕落飞鸟
2023/04/30
1.6K1
视图
视图是 Web的可见内容,一般是 HTML结合 PHP 获取的数据提供给用户使用的部分,属于 MVC 中的 V。
PM吃瓜
2019/08/13
8710
ThinkPHP-视图的定义和使用(三)
除了视图继承外,ThinkPHP还提供了另一种布局视图的方式,即模板布局。模板布局是一种在视图中定义固定布局和可变内容的技术。在ThinkPHP中,可以使用layout标签来实现模板布局。
堕落飞鸟
2023/05/02
2880
ThinkPHP-模板布局和继承(一)
在Web应用程序开发中,通常需要为多个页面定义相同的布局,包括页头、页脚、导航栏等。为了避免重复编写布局代码,ThinkPHP提供了模板布局和继承功能。
堕落飞鸟
2023/05/02
4680
ThinkPHP-模板布局和继承(三)
模板布局是指在视图文件中定义一个公共的布局,其他的视图文件可以继承该布局,并在其中插入自己的内容。这种方式可以减少代码的重复性,同时也可以方便地管理页面结构和样式。
堕落飞鸟
2023/05/02
6070
ThinkPHP5学习002-向模板中传递变量
在模板中输出变量的值,使用{},其中no,name就是控制器传递给模板的两个变量名
哆哆Excel
2022/10/25
1.3K0
ThinkPHP5学习002-向模板中传递变量
Thinkphp
thinkphp:mvc模式 1,thinkphp的安装配置 条件 PHP>=5.4.0 PDO MbString CURL PHP Externsion Mysql Apache或Nginx 安装: composer composer config -g repo.packagist composer https://packagist.phpcomposer.com composer create-project --prefer-dist topthink/think think_co
Dean0731
2020/05/11
2.1K0
ThinkPHP-框架特点和优势(二)
ThinkPHP采用简洁明了的设计理念,内置了丰富的库和工具,使得开发人员可以快速地开发出高质量的应用程序。同时,它也提供了多种模板引擎和缓存机制,可以显著提高应用程序的性能和响应速度。
堕落飞鸟
2023/04/30
4150
PHP-ThinkPHP将后台模板与框架做结合
商品列表 Goods控制器index方法 goods_list.html -> index.html
cwl_java
2020/03/27
2.6K0
【漏洞通报】ThinkPHP3.2.x RCE漏洞通报
近日,默安玄甲实验室发现网络上出现针对ThinkPHP3.2的远程代码执行漏洞。该漏洞是在受影响的版本中,业务代码中如果模板赋值方法assign的第一个参数可控,则可导致模板文件路径变量被覆盖为携带攻击代码的文件路径,造成任意文件包含,执行任意代码。
Khan安全团队
2021/07/30
5.9K0
【漏洞通报】ThinkPHP3.2.x RCE漏洞通报
骑士 CMS 远程代码执行分析
续师傅前些天跟我说骑士 CMS 更新了一个补丁,assign_resume_tpl 这个全局函数出现了问题,让我分析看看能不能利用,我看了下官网公告:
p4nda
2023/01/03
1.1K0
骑士 CMS 远程代码执行分析
ThinkPhp5开发实战1:搭建环境配置TP5框架(持续更新收藏关注)
php框架有助于促进快速应用开发,不仅节省时间,有助于建立更稳定的应用,而且,减少了重复代码。本文章采用图文模式将记录学习thinkphp5的开发,一定做到最详细,最适合新手,本文章适用于对php、HTML有一定基础的同学,由于需要适合新手该系列更新将非常慢,如果对于有错误的还请指出,本文仅对tp5做一个大体的认识
德宏大魔王
2023/08/08
2.1K0
ThinkPhp5开发实战1:搭建环境配置TP5框架(持续更新收藏关注)
thinkphp常用配置config
下载解压 ThinkPHP 3.2.3,在默认的应用 Application(./Application) 中,包含一个默认的模块 Home(./Application/Home)。
PM吃瓜
2019/08/12
3K0
thinkphp常用配置config
ThinkPHP-视图的定义和使用(一)
ThinkPHP是一个快速、简单、灵活的PHP开发框架,提供了丰富的视图功能,可以方便地定义和使用视图。
堕落飞鸟
2023/05/02
5350
相关推荐
ThinkPHP-视图的使用和渲染(三)
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验