Java中的集合
Java LinkedList指南
Java ArrayList指南
Java中不可變的ArrayList
CopyOnWriteArrayList指南
JavaJava中的多維ArrayList
將迭代器轉換為列表
Java –從列表中獲取隨機項目/元素
用Java對列表進行分區
從Java列表中刪除所有Null
從Java中的列表中刪除所有重複項
檢查Java中兩個列表是否相等
如何使用Java在列表中查找元素
Java列表UnsupportedOperationException
將列表複製到Java中的另一個列表
從列表中刪除所有出現的特定值
將多個元素添加到Java ArrayList
從列表中刪除第一個元素
在Java中迭代列表的方法
Java中兩個列表的交集
如何計算Arraylist中的重複元素
查找Java中兩個列表之間的差異
從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的項目,因此應該易於導入和運行。