Entfernen aller Nullen aus einer Liste in Java

In diesem kurzen Tutorial wird gezeigt, wie Sie alle Nullelemente aus einer Liste entfernen , indem Sie Java, Guava, die Apache Commons-Sammlungen und die neuere Java 8-Lambda-Unterstützung verwenden.

Dieser Artikel ist Teil der Reihe „ Java - Back to Basic “ hier auf Baeldung.

1. Entfernen Sie Nullen mit Plain Java aus einer Liste

Das Java Collections Framework bietet eine einfache Lösung zum Entfernen aller Nullelemente in der Liste - eine grundlegende while- Schleife :

@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 mit Google Guava Nullen aus einer Liste

Wir können Nullen auch mit Guava und einem funktionaleren Ansatz über Prädikate entfernen :

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

Wenn wir die Quellliste nicht ändern möchten, können wir mit Guava alternativ 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 mithilfe von Apache Commons-Sammlungen aus einer Liste

Schauen wir uns nun eine einfache Lösung an, die die Apache Commons Collections-Bibliothek mit einem ä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 auch die ursprüngliche Liste ändert .

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

Schauen wir uns zum Schluss eine Java 8-Lösung an, bei der Lambdas zum Filtern der Liste verwendet wird . 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. Schlussfolgerung

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

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