從Java列表中刪除所有Null

這個快速教程將展示如何刪除所有null從元素List ,使用普通的Java,番石榴,在Apache Commons Collections中和更新的Java 8拉姆達支持。

本文是Baeldung上“ Java – Back to Basic ”系列文章的一部分。

1.使用純Java從List刪除空

Java Collections Framework提供了一個簡單的解決方案,用於刪除List中的所有空元素-一個基本的while循環

@Test

 public void givenListContainsNulls_whenRemovingNullsWithPlainJava_thenCorrect() {

 List<Integer> list = Lists.newArrayList(null, 1, null);

 while (list.remove(null));



 assertThat(list, hasSize(1));

 }

或者,我們也可以使用以下簡單方法:

@Test

 public void givenListContainsNulls_whenRemovingNullsWithPlainJavaAlternative_thenCorrect() {

 List<Integer> list = Lists.newArrayList(null, 1, null);

 list.removeAll(Collections.singleton(null));



 assertThat(list, hasSize(1));

 }

請注意,這兩種解決方案都將修改源列表。

2.使用Google Guava從List刪除Null

我們還可以通過謂詞使用Guava和更實用的方法來刪除null

@Test

 public void givenListContainsNulls_whenRemovingNullsWithGuavaV1_thenCorrect() {

 List<Integer> list = Lists.newArrayList(null, 1, null);

 Iterables.removeIf(list, Predicates.isNull());



 assertThat(list, hasSize(1));

 }

另外,如果我們不想修改源列表,番石榴將允許我們創建一個新的過濾器列表:

@Test

 public void givenListContainsNulls_whenRemovingNullsWithGuavaV2_thenCorrect() {

 List<Integer> list = Lists.newArrayList(null, 1, null, 2, 3);

 List<Integer> listWithoutNulls = Lists.newArrayList(

 Iterables.filter(list, Predicates.notNull()));



 assertThat(listWithoutNulls, hasSize(3));

 }

3.使用Apache Commons Collections從List刪除空值

現在讓我們來看一個使用Apache Commons Collections庫的簡單解決方案,該庫具有類似的功能樣式:

@Test

 public void givenListContainsNulls_whenRemovingNullsWithCommonsCollections_thenCorrect() {

 List<Integer> list = Lists.newArrayList(null, 1, 2, null, 3, null);

 CollectionUtils.filter(list, PredicateUtils.notNullPredicate());



 assertThat(list, hasSize(3));

 }

請注意,此解決方案還將修改原始列表

4.使用Lambdas(Java 8)從List刪除空值

最後–讓我們看一下使用Lambdas過濾列表的Java 8解決方案;過濾過程可以並行或串行進行:

@Test

 public void givenListContainsNulls_whenFilteringParallel_thenCorrect() {

 List<Integer> list = Lists.newArrayList(null, 1, 2, null, 3, null);

 List<Integer> listWithoutNulls = list.parallelStream()

 .filter(Objects::nonNull)

 .collect(Collectors.toList());

 }



 @Test

 public void givenListContainsNulls_whenFilteringSerial_thenCorrect() {

 List<Integer> list = Lists.newArrayList(null, 1, 2, null, 3, null);

 List<Integer> listWithoutNulls = list.stream()

 .filter(Objects::nonNull)

 .collect(Collectors.toList());

 }



 public void givenListContainsNulls_whenRemovingNullsWithRemoveIf_thenCorrect() {

 List<Integer> listWithoutNulls = Lists.newArrayList(null, 1, 2, null, 3, null);

 listWithoutNulls.removeIf(Objects::isNull);



 assertThat(listWithoutNulls, hasSize(3));

 }

就是這樣–一些快速且非常有用的解決方案,用於擺脫List中的所有null元素。

5.結論

在本文中,我們能夠探索使用Java,Guava或Lambdas從List刪除空值的各種方法。

所有這些示例和代碼片段的實現都可以在GitHub項目中找到。這是一個基於Maven的項目,因此應該易於導入和運行。