API de Stream mejorada de Java 9

Java 9 新特性Nuevas características de Java 9

La API de Stream mejorada de Java 9 agrega algunos métodos convenientes que facilitan el procesamiento de flujos y la escritura de consultas complejas con colectores.

Java 9 agrega varios métodos nuevos a Stream: dropWhile, takeWhile, ofNullable, y agrega un método sobrecargado para el método iterate.

método takeWhile

Sintaxis

default Stream<T> takeWhile(Predicate<? super T> predicate)

El método takeWhile() usa un predicado como parámetro y devuelve un subconjunto del Stream dado hasta que la sentencia del predicado devuelve false por primera vez. Si el primer valor no cumple la condición del predicado, devolverá un Stream vacío.

El método takeWhile() en un Stream ordenado devuelve tantos elementos como sea posible desde el principio; en un Stream no ordenado, takeWhile devuelve un subconjunto de elementos desde el principio que cumplen los requisitos del Predicate.

Ejemplo

import java.util.stream.Stream; public class Tester { public static void main(String[] args) { Stream.of("a","b","c","","e","f").takeWhile(s->!s.isEmpty()) .forEach(System.out::print); } }

En el ejemplo anterior, el método takeWhile deja de generar la salida en bucle al encontrar una cadena vacía. El resultado de la ejecución es:

abc

método dropWhile

Sintaxis

default Stream<T> dropWhile(Predicate<? super T> predicate)

El método dropWhile tiene el efecto contrario al de takeWhile: usa un predicado como parámetro y solo devuelve un subconjunto del Stream dado cuando la sentencia del predicado devuelve false por primera vez.

Ejemplo

import java.util.stream.Stream; public class Tester { public static void main(String[] args) { Stream.of("a","b","c","","e","f").dropWhile(s-> !s.isEmpty()) .forEach(System.out::print); } }

En el ejemplo anterior, el método dropWhile comienza a generar la salida en bucle al encontrar una cadena vacía. El resultado de la ejecución es:

ef

método iterate

Sintaxis

static <T> Stream<T> iterate(T seed, Predicate<? super T> hasNext, UnaryOperator<T> next)

El método permite crear un flujo secuencial (potencialmente infinito) utilizando un valor semilla inicial y aplicando iterativamente el método next especificado. La iteración se detiene cuando el predicado hasNext especificado devuelve false.

Ejemplo

java.util.stream.IntStream; public class Tester { public static void main(String[] args) { IntStream.iterate(3, x -> x < 10, x -> x+ 3).forEach(System.out::println); } }

El resultado de la ejecución es:

3
6
9

método ofNullable

Sintaxis

static <T> Stream<T> ofNullable(T t)

El método ofNullable puede prevenir la excepción NullPointerException, ya que permite evitar valores null mediante la comprobación del flujo.

Si el elemento especificado no es null, toma el elemento y genera un flujo de un solo elemento; si el elemento es null, devuelve un flujo vacío.

Ejemplo

import java.util.stream.Stream; public class Tester { public static void main(String[] args) { long count = Stream.ofNullable(100).count(); System.out.println(count); count = Stream.ofNullable(null).count(); System.out.println(count); } }

El resultado de la ejecución es:

1
0

Java 9 新特性Nuevas características de Java 9

Otras extensiones