Java 从一个 List 中删除 null 元素
2022/5/1 9:12:40
本文主要是介绍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 元素。
https://www.ossez.com/t/java-list-null/13940
这篇关于Java 从一个 List 中删除 null 元素的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-04-26敏捷开发:想要快速交付就必须舍弃产品质量?
- 2024-04-26静态代码分析的这些好处,我竟然都不知道?
- 2024-04-26你在测试金字塔的哪一层?(下)
- 2024-04-26快刀斩乱麻,DevOps让代码评审也自动起来
- 2024-04-262024年最好用的10款ER图神器!
- 2024-04-2203-为啥大模型LLM还没能完全替代你?
- 2024-04-2101-大语言模型发展
- 2024-04-17基于SpringWeb MultipartFile文件上传、下载功能
- 2024-04-14个人开发者,Spring Boot 项目如何部署
- 2024-04-14RAG应用开发实战02-相似性检索的关键 - Embedding