從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的項目,因此應該易於導入和運行。
0 條評論,你可以發表評論,我們會進行改進
