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());