このクイックチュートリアルでは、プレーンなJava、Guava、Apache Commons Collections、および新しいJava 8 lambdaサポートを使用して、

List




__、


からすべての

null__要素を削除する方法を説明します。

この記事はリンクの一部です:/java-tutorial[The

Java – Back to Basic

]シリーズはここBaeldungにあります。


1プレーンJava

を使用して

List

からnullを削除する

Java Collections Frameworkは

List

のすべてのnull要素を削除するための簡単な解決策を提供します – 基本的な

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));
}

あるいは、

ソースリストを変更したくない場合は、

Guavaは新しいフィルタリストを作成することを許可します。

@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

からnullを取り除く

それでは、同様の機能スタイルを使った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を使用して

List

からnullを削除する(Java 8)

最後に、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

からnullを削除するために必要となる可能性があるさまざまなアプローチについて説明しました。

これらすべての例とスニペットの実装はhttps://github.com/eugenp/tutorials/tree/master/core-java-collections[GitHubプロジェクト]にあります。これはMavenベースのプロジェクトなので、インポートして実行するのは簡単なはずです。