Suppression de tous les nulls d’une liste en Java

Supprimer toutes les Null d'une liste en Java

Ce rapide tutoriel va montrer commentremove all null elements from a List, en utilisant Java, Guava, les collections Apache Commons et le nouveau support de Java 8 lambda.

Cet article fait partie dethe “Java – Back to Basic” series ici par exemple.

1. Supprimer les valeurs nulles d'unList à l'aide de Java brut

Le Java Collections Framework offre une solution simple pour lesremoving 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));
}

Alternativement, nous pouvons également utiliser l'approche simple suivante:

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

    assertThat(list, hasSize(1));
}

Notez que ces deux solutions vont modifier la liste des sources.

2. Supprimer les Nulls d'unList à l'aide de Google Guava

On peut aussiremove nulls using Guava et une approche plus fonctionnelle, via des prédicats:

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

    assertThat(list, hasSize(1));
}

Alternativement,if we don’t want to modify the source list, Guava nous permettra de créer une nouvelle liste de filtres:

@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. Supprimer les valeurs nulles d'unList à l'aide des collections Apache Commons

Examinons maintenant une solution simple utilisant la bibliothèque Apache Commons Collections utilisant un style fonctionnel similaire:

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

Notez que cette solution sera égalementmodify the original list.

4. Supprimer les valeurs nulles d'unList à l'aide de Lambdas (Java 8)

Enfin, regardonsa Java 8 solution using Lambdas to filter the List; le processus de filtrage peut être effectué en parallèle ou en série:

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

Et c’est tout - des solutions rapides et très utiles pour se débarrasser de tous les éléments nuls d’une liste.

5. Conclusion

Dans cet article, nous avons pu explorer les différentes approches que nous pouvons avoir pour supprimer les valeurs nulles d'unList en utilisant Java, Guava ou Lambdas.

L'implémentation de tous ces exemples et extraits peut être trouvée dans lesGitHub project. Ceci est un projet basé sur Maven, il devrait donc être facile à importer et à exécuter.