JavaのリストからすべてのNullを削除する
このクイックチュートリアルでは、プレーンJava、Guava、Apache Commons Collections、および新しいJava 8ラムダサポートを使用してremove all null elements from a List,する方法を示します。
この記事は、例としてここのthe “Java – Back to Basic” seriesの一部です。
1. プレーンJavaを使用してListからNullを削除する
Javaコレクションフレームワークは、removing all null elements in the List – a basic while loopの簡単なソリューションを提供します。
@Test
public void givenListContainsNulls_whenRemovingNullsWithPlainJava_thenCorrect() {
List list = Lists.newArrayList(null, 1, null);
while (list.remove(null));
assertThat(list, hasSize(1));
}
または、次の簡単なアプローチを使用することもできます。
@Test
public void givenListContainsNulls_whenRemovingNullsWithPlainJavaAlternative_thenCorrect() {
List list = Lists.newArrayList(null, 1, null);
list.removeAll(Collections.singleton(null));
assertThat(list, hasSize(1));
}
これらのソリューションはどちらもソースリストを変更することに注意してください。
2. Google Guavaを使用してListからヌルを削除する
述語を介して、remove nulls using Guavaおよびより機能的なアプローチを行うこともできます。
@Test
public void givenListContainsNulls_whenRemovingNullsWithGuavaV1_thenCorrect() {
List list = Lists.newArrayList(null, 1, null);
Iterables.removeIf(list, Predicates.isNull());
assertThat(list, hasSize(1));
}
または、if we don’t want to modify the source list、Guavaを使用すると、新しいフィルターリストを作成できます。
@Test
public void givenListContainsNulls_whenRemovingNullsWithGuavaV2_thenCorrect() {
List list = Lists.newArrayList(null, 1, null, 2, 3);
List listWithoutNulls = Lists.newArrayList(
Iterables.filter(list, Predicates.notNull()));
assertThat(listWithoutNulls, hasSize(3));
}
3. Apache Commonsコレクションを使用してListからヌルを削除する
同様の機能スタイルを使用してApacheCommonsCollectionsライブラリを使用する簡単なソリューションを見てみましょう。
@Test
public void givenListContainsNulls_whenRemovingNullsWithCommonsCollections_thenCorrect() {
List list = Lists.newArrayList(null, 1, 2, null, 3, null);
CollectionUtils.filter(list, PredicateUtils.notNullPredicate());
assertThat(list, hasSize(3));
}
このソリューションもmodify the original listになることに注意してください。
4. Lambdas(Java 8)を使用してListからNullを削除する
最後に–a Java 8 solution using Lambdas to filter the Listを見てみましょう。フィルタリングプロセスは、並列またはシリアルで実行できます。
@Test
public void givenListContainsNulls_whenFilteringParallel_thenCorrect() {
List list = Lists.newArrayList(null, 1, 2, null, 3, null);
List listWithoutNulls = list.parallelStream()
.filter(Objects::nonNull)
.collect(Collectors.toList());
}
@Test
public void givenListContainsNulls_whenFilteringSerial_thenCorrect() {
List list = Lists.newArrayList(null, 1, 2, null, 3, null);
List listWithoutNulls = list.stream()
.filter(Objects::nonNull)
.collect(Collectors.toList());
}
public void givenListContainsNulls_whenRemovingNullsWithRemoveIf_thenCorrect() {
List listWithoutNulls = Lists.newArrayList(null, 1, 2, null, 3, null);
listWithoutNulls.removeIf(Objects::isNull);
assertThat(listWithoutNulls, hasSize(3));
}
これで、リストからすべてのnull要素を取り除くための迅速で非常に便利なソリューションがいくつかあります。
5. 結論
この記事では、Java、Guava、またはLambdasを使用してListからnullを削除するために必要なさまざまなアプローチを検討することができました。
これらすべての例とスニペットの実装は、GitHub projectにあります。 これはMavenベースのプロジェクトであるため、インポートと実行が簡単である必要があります。