Java 9 - Mejoras en la API de transmisión
Los flujos se introdujeron en Java para ayudar a los desarrolladores a realizar operaciones agregadas a partir de una secuencia de objetos. Con Java 9, se agregan algunos métodos más para mejorar las transmisiones.
takeWhile(interfaz de predicado)
Sintaxis
default Stream<T> takeWhile(Predicate<? super T> predicate)
El método takeWhile toma todos los valores hasta que el predicado devuelve falso. Devuelve, en caso de secuencia ordenada, una secuencia que consta del prefijo más largo de elementos tomados de esta secuencia que coinciden con el predicado dado.
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); } }
Salida
El método takeWhile toma todos los valores a, b y c, luego, una vez que la cadena está vacía, deja de ejecutarse.
abc
dropWhile(interfaz de predicado)
Sintaxis
default Stream<T> dropWhile(Predicate<? super T> predicate)
El método dropWhile desecha todos los valores al principio hasta que el predicado devuelve verdadero. Devuelve, en caso de secuencia ordenada, una secuencia que consta de los elementos restantes de esta secuencia después de eliminar el prefijo más largo de los elementos que coinciden con el predicado dado.
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); System.out.println(); Stream.of("a","b","c","","e","","f").dropWhile(s-> !s.isEmpty()) .forEach(System.out::print); } }
Salida
dropWhile elimina los valores a, b y c, luego, una vez que la cadena está vacía, toma todos los valores.
ef ef
iterar
Sintaxis
static <T> Stream<T> iterate(T seed, Predicate<? super T> hasNext, UnaryOperator<T> next)
El método de iteración ahora tiene el predicado hasNext como parámetro que detiene el bucle una vez que el predicado hasNext devuelve falso.
Ejemplo
import 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); } }
Salida
3 6 9
deAnulable
Sintaxis
static <T> Stream<T> ofNullable(T t)
Se introduce el método ofNullable para evitar NullPointerExceptions y para evitar comprobaciones nulas de secuencias. Este método devuelve un Stream secuencial que contiene un solo elemento, si no es nulo; de lo contrario, devuelve un Stream 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); } }
Salida
1 0
Java