Java 从一个 List 中删除 null 元素

概述

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

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

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

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

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

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

    @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 删除。

    @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。

    @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 就可以了。

@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 进行修改。

    @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 进行处理。

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

请查看下面的代码:

    @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 元素。

Java 从一个 List 中删除 null 元素 - Java - OSSEZicon-default.png?t=M3K6https://www.ossez.com/t/java-list-null/13940

 

  • 4
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

HoneyMoose

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值