Otra gran característica de Stream API es la paralelización de las fuentes parallelStream (). Se utiliza para mejorar el rendimiento cuando tienes q procesar grandes cantidades de datos. Las corrientes paralelas pueden acelerar la ejecución para ciertos tipos de transacciones. Yo las uso, cuando sé que la colección es demasiado grande para manejarla con «ForkJoin». Más información sobre la biblioteca ForkJoin puedes leer aqui: http://www.baeldung.com/java-fork-join.
Volvemos a nuestras ovejas y vamos a considerar un ejemplo práctico. Un ejemplo para buscar máximos y mínimos en una colección.
ArrayList
testValues.add(0,15);
testValues.add(1,1);
testValues.add(2,2);
testValues.add(3,100);
testValues.add(4,50);
Optional
System.out.println("MaxValue="+maxValue);
Optional
System.out.println("MinValue="+minValue);
Ejemplo poco mas complicado donde añadimos una excepción (cuando el valor max será null):
ArrayList
testValuesNull.add(0,null);
testValuesNull.add(1,1);
testValuesNull.add(2,2);
testValuesNull.add(3,70);
testValuesNull.add(4,50);
Optional maxValueNotNull = testValuesNull.stream().filter((p) -> p != null).max(Integer::compareTo);
System.out.println("maxValueNotNull="+maxValueNotNull);
public class SportsCamp
import java.util.Arrays;
import java.util.Collection;
public class Start
{
public static void main(String[] args)
{
Collection<SportsCamp>
String name = sport.stream().max((p1,p2) -> p1.getDay().compareTo(p2.getDay())).get().getName();
System.out.println("Name="+name);
}
}
long countName = sport.stream().filter((p) -> p.getName() != null && p.getName().equals("Juan")).count();
System.out.println("countName="+countName);
Obviamente el resultado sera igual a 1 (hasta q añadimos otro "Juan" a nuestra colección).
Como he dicho anteriormente, podemos utilizar parallelStream() para contar los "Juanes":
long countNameParallel = sport.parallelStream().filter((p) -> p.getName() != null && p.getName().equals("Juan")).count();
System.out.println("countNameParallel=" + countNameParallel);
La eficacidad de parallelStream () se muestra mejor en los servidores de gama alta (multi-core) con grandes cantidades de datos. Es la cuestión de probar y ajustar los parámetros del servidor.
Integer daySum = sport.stream().reduce(0, (sum, p) -> sum += p.getDay(), (sum1, sum2) -> sum1 + sum2);
System.out.println("DaySize=" + daySum);//resultado = 22
En esta forma de realización, el reduce toma tres valores: 1.identificador, 2.acumulador, 3.resultado.
No hay comentarios:
Publicar un comentario