Cómo filtrar valores nulos en streams de java


Muchas veces necesitamos filtrar valores nulos (null) y descartarlos de nuestros streams. Para ello el API de streams nos proporciona la operacion filter:

Stream<T> filter(Predicate<? super T> predicate)
          Devuelve un stream que contiene todos los elementos
          que cumplen el predicado dado.

De este modo, dado un stream cualquiera podríamos filtrar los valores null del siguiente modo:

List<String> lista = Arrays.asList("uno", "dos", null, "cuatro", null, "seis");

List<String> sinNulos = lista.stream()
                             .filter(item -> item != null)
                             .collect(Collectors.toList());

System.out.println(lista);
System.out.println(sinNulos);

La salida por consola de ejecutar el código anterior sería:

[uno, dos, null, cuatro, null, seis]
[uno, dos, cuatro, seis]

Si queremos evitar tener que crear la lambda con el item != null podemos hacerlo con el método utilidad nonNull de la clase Objects (java.util.Objects) del siguiente modo:

List<String> sinNulos = lista.stream()
                             .filter(Objects::nonNull)
                             .collect(Collectors.toList());
Icon