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.