Removendo todos os nulos de uma lista em Java
Este rápido tutorial vai mostrar comoremove all null elements from a List, usando Java puro, Guava, o Apache Commons Collections e o suporte a lambda Java 8 mais recente.
Este artigo faz parte dethe “Java – Back to Basic” series aqui no exemplo.
1. Remover nulos de umList usando o Java simples
O Java Collections Framework oferece uma solução simples pararemoving 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));
}
Como alternativa, também podemos usar a seguinte abordagem simples:
@Test
public void givenListContainsNulls_whenRemovingNullsWithPlainJavaAlternative_thenCorrect() {
List list = Lists.newArrayList(null, 1, null);
list.removeAll(Collections.singleton(null));
assertThat(list, hasSize(1));
}
Observe que essas duas soluções modificarão a lista de fontes.
2. Remover nulos de umList usando o Google Guava
Também podemosremove nulls using Guavae uma abordagem mais funcional, via predicados:
@Test
public void givenListContainsNulls_whenRemovingNullsWithGuavaV1_thenCorrect() {
List list = Lists.newArrayList(null, 1, null);
Iterables.removeIf(list, Predicates.isNull());
assertThat(list, hasSize(1));
}
Alternativamente,if we don’t want to modify the source list, Guava nos permitirá criar uma nova lista de filtros:
@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. Remover nulos de aList usando coleções do Apache Commons
Vejamos agora uma solução simples usando a biblioteca Apache Commons Collections usando um estilo funcional semelhante:
@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));
}
Observe que esta solução também terámodify the original list.
4. Remova nulos de aList usando Lambdas (Java 8)
Finalmente - vamos olhar paraa Java 8 solution using Lambdas to filter the List; o processo de filtragem pode ser feito em paralelo ou serial:
@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 é isso - algumas soluções rápidas e muito úteis para se livrar de todos os elementos nulos de uma Lista.
5. Conclusão
Neste artigo, fomos capazes de explorar as diferentes abordagens que podemos ter para remover nulos de aList usando Java, Guava ou Lambdas.
A implementação de todos esses exemplos e snippets pode ser encontrada emGitHub project. Este é um projeto baseado em Maven, portanto deve ser fácil importar e executar.