Entfernen aller Nullwerte aus einer Liste in Java

Entfernen aller Nullen aus einer Liste in Java

Dieses kurze Tutorial zeigt, wieremove all null elements from a List, mit einfachem Java, Guava, den Apache Commons-Sammlungen und der neueren Java 8-Lambda-Unterstützung verwendet werden.

Dieser Artikel ist Teil vonthe “Java – Back to Basic” series hier am Beispiel.

1. Entfernen Sie Nullen aus einemList mit Plain Java

Das Java Collections Framework bietet eine einfache Lösung fürremoving 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));
}

Alternativ können wir auch den folgenden einfachen Ansatz verwenden:

@Test
public void givenListContainsNulls_whenRemovingNullsWithPlainJavaAlternative_thenCorrect() {
    List list = Lists.newArrayList(null, 1, null);
    list.removeAll(Collections.singleton(null));

    assertThat(list, hasSize(1));
}

Beachten Sie, dass beide Lösungen die Quellliste ändern.

2. Entfernen Sie Nullen aus einemList mit Google Guava

Wir können auchremove nulls using Guava und einen funktionaleren Ansatz über Prädikate verwenden:

@Test
public void givenListContainsNulls_whenRemovingNullsWithGuavaV1_thenCorrect() {
    List list = Lists.newArrayList(null, 1, null);
    Iterables.removeIf(list, Predicates.isNull());

    assertThat(list, hasSize(1));
}

Alternativ können Sie mitif we don’t want to modify the source list, Guava eine neue Filterliste erstellen:

@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. Entfernen Sie Nullen aus einemList mithilfe von Apache Commons-Sammlungen

Schauen wir uns nun eine einfache Lösung an, bei der die Apache Commons Collections-Bibliothek einen ähnlichen Funktionsstil verwendet:

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

Beachten Sie, dass diese Lösung auchmodify the original list enthält.

4. Entfernen Sie Nullen aus einemList mit Lambdas (Java 8)

Zum Schluss schauen wir unsa Java 8 solution using Lambdas to filter the List an. Der Filtervorgang kann parallel oder seriell erfolgen:

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

Und das war's - einige schnelle und sehr nützliche Lösungen, um alle Nullelemente aus einer Liste zu entfernen.

5. Fazit

In diesem Artikel konnten wir die verschiedenen Ansätze untersuchen, mit denen wir mithilfe von Java, Guava oder Lambdas Nullen ausList entfernen können.

Die Implementierung all dieser Beispiele und Snippets finden Sie inGitHub project. Dies ist ein Maven-basiertes Projekt, daher sollte es einfach zu importieren und auszuführen sein.