Siguiendo con los posts de Java 8, vamos a continuar con otra de las grandes innovaciones de que trae. En este caso los java.util.stream, que incluye clases para sequencias de elementos. Veremos varios ejemplos y así paso a paso veremos de una forma pŕactica su utilidad y el sentido de para que se creo.
La interfaz 'Collection' ha sido modificada para incluir un método 'stream()' que permita la creación a partir de una.
List<String> list = Arrays.asList("uno", "dos", "tres"); Stream<String> stream = list.stream(); Stream<String> streamBis = Stream.of("uno", "dos", "tres");
Los streams nos permitirán iterar disminuyendo el código a escribir y aportando legitibilidad.
stream.forEach(element -> System.out.println(element)); //returns uno, dos, tres
También nos provee de un método que nos permite filtrar y generar otro stream con los valores del primero que cumplan los requisitos del filtro
Stream<String> filterStream = stream.filter(element -> element.equals("uno")); filterStream.forEach(element -> System.out.println(element)); //return uno
También podemos crear un stream de otro tipo en base a un stream existente. Para ello haremos uso del método 'map' que nos permitirá hacer la conversión.
Stream<Boolean> booleanStream = stream.map(element -> element.equals("uno")); booleanStream.forEach(element -> System.out.println(element)); //returns true, false, false
También nos provee varios métodos para encontrar coincidencias en una sequencia. Dichos métodos nos devolverán unicamente un valor booleano.
stream = Stream.of("uno", "dos", "tres"); //return true System.out.println(stream.anyMatch(element -> element.contains("o"))); stream = Stream.of("uno", "dos", "tres"); //return false System.out.println(stream.allMatch(element -> element.contains("o"))); stream = Stream.of("uno", "dos", "tres"); //return false System.out.println(stream.noneMatch(element -> element.contains("o")));
Nos provee de un método denominado 'reduce' que permite realizar una operación con cada elemento de la sequencia, añadiendo además un valor inicial.
System.out.println(stream.reduce("Numeros: ", (a, b) -> a + b + " ")); // return 'Numeros: uno dos tres '
A trav'es del método 'collect' podremos convertir un stream en un objeto del tipo 'Collection'.
List<String> list = stream.collect(Collectors.toList()); System.out.println(list); //return [uno, dos, tres]
Por último una característica muy notable de estos nuevos stream. Y es que podemos iterar por la secuencia de forma paralela.
list.parallelStream().forEach(element -> System.out.println(element)); //posible salida: dos, uno, tres
No hay comentarios:
Publicar un comentario