Rimozione di tutti i null da un elenco in Java

Questo rapido tutorial mostrerà come rimuovere tutti gli elementi nulli da un elenco , utilizzando Java semplice, Guava, le collezioni Apache Commons e il più recente supporto lambda Java 8.

Questo articolo fa parte della serie " Java - Back to Basic " qui su Baeldung.

1. Rimuovere i valori nulli da un elenco utilizzando Plain Java

Il Java Collections Framework offre una soluzione semplice per rimuovere tutti gli elementi nulli nell'elenco - un ciclo while di base :

@Test public void givenListContainsNulls_whenRemovingNullsWithPlainJava_thenCorrect() { List list = Lists.newArrayList(null, 1, null); while (list.remove(null)); assertThat(list, hasSize(1)); }

In alternativa, possiamo anche utilizzare il seguente semplice approccio:

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

Nota che entrambe queste soluzioni modificheranno l'elenco di origine.

2. Rimuovere i valori nulli da un elenco utilizzando Google Guava

Possiamo anche rimuovere i valori nulli usando Guava e un approccio più funzionale, tramite predicati:

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

In alternativa, se non vogliamo modificare l'elenco sorgente , Guava ci consentirà di creare un nuovo elenco di filtri:

@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. Rimuovere i valori nulli da un elenco utilizzando le raccolte Apache Commons

Diamo ora un'occhiata a una soluzione semplice utilizzando la libreria delle collezioni Apache Commons utilizzando uno stile funzionale simile:

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

Nota che questa soluzione modificherà anche l'elenco originale .

4. Rimuovere i valori nulli da un elenco utilizzando Lambdas (Java 8)

Infine, diamo un'occhiata a una soluzione Java 8 che utilizza Lambdas per filtrare l'elenco ; il processo di filtraggio può essere eseguito in parallelo o in serie:

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

E questo è tutto: alcune soluzioni rapide e molto utili per sbarazzarsi di tutti gli elementi nulli da una lista.

5. conclusione

In questo articolo, siamo stati in grado di esplorare i diversi approcci che possiamo avere per rimuovere i null da un elenco utilizzando Java, Guava o Lambdas.

L'implementazione di tutti questi esempi e frammenti può essere trovata nel progetto GitHub. Questo è un progetto basato su Maven, quindi dovrebbe essere facile da importare ed eseguire.