Acabo de desarrollar un bulto en mi cerebro con el único propósito de procesar como funciona el reduce(valorInicial, BinaryFunction, BinaryOperator)
Introducción a la programación Funcional
¿Qué es la Programación Funcional?
Entendiendo las partes de la programación funcional
¿Qué es una función en Java?
Funciones como ciudadanos de primera clase
Funciones puras
Entendiendo los efectos secundarios
Funciones de orden mayor
Funciones lambda
Inmutabilidad
Functional Programming en Java
Repositorio del curso
Configuración del entorno de trabajo
Revisando el paquete java.util.function: Function
Revisando el paquete java.util.function: Predicate
Revisando el paquete java.util.function: Consumer y Supplier
Revisando el paquete java.util.function: Operators y BiFunction
Entendiendo dos jugadores clave: SAM y FunctionalInterface
Operador de Referencia
Analizando la inferencia de tipos
Comprendiendo la sintaxis de las funciones lambda
Usando metodos default en nuestras interfaces
Dándole nombre a un viejo amigo: Chaining
Entendiendo la composición de funciones
Optional y Streams: Datos mas interesantes
La clase Optional
Entendiendo los Streams
¿Qué son los Stream listeners?
Operaciones y Collectors
Streams de tipo específico y Paralelismo
Operaciones Terminales
Operaciones Intermedias
Collectors
Todo junto: Proyecto Job-search
job-search: Un proyecto para encontrar trabajo
Vista rápida a un proyecto de Gradle
Revisando las opciones para nuestro CLI
Librerías adicionales para nuestro proyecto
Entendiendo la API de jobs
Diseñando las Funciones Constructoras de nuestro Proyecto
Agregando validaciones de datos
Diseñando las funciones de transformacion de datos
Creando flujos extras de transformación de Datos
Conclusiones
Un repaso a lo aprendido
Las operaciones terminales son aquellas operaciones que como resultado no generan un nuevo Stream
. Su resultado puede variar según la operación. La utilidad de estas es poder generar un valor final a todas nuestras operaciones o consumir los datos finales. La razón principal para querer esto es que los datos deberán salir en algún punto de nuestro control y es con las operaciones terminales que hacemos esto.
...
Regístrate o inicia sesión para leer el resto del contenido.
Aportes 18
Preguntas 2
Acabo de desarrollar un bulto en mi cerebro con el único propósito de procesar como funciona el reduce(valorInicial, BinaryFunction, BinaryOperator)
Por si gustan hacer la ejecución de reduce con 3 argumentos:
Stream<String> aLongStoryStreamAgain = Stream.of("Cuando", "despertó,", "el", "dinosaurio", "todavía", "estaba", "allí.", "Cuando", "despertó,", "el", "dinosaurio", "todavía", "estaba", "allí.", "Cuando", "despertó,", "el", "dinosaurio", "todavía", "estaba", "allí.", "Cuando", "despertó,", "el", "dinosaurio", "todavía", "estaba", "allí.", "Cuando", "despertó,", "el", "dinosaurio", "todavía", "estaba", "allí.", "Cuando", "despertó,", "el", "dinosaurio", "todavía", "estaba", "allí.", "Cuando", "despertó,", "el", "dinosaurio", "todavía", "estaba", "allí.", "Cuando", "despertó,", "el", "dinosaurio", "todavía", "estaba", "allí.", "Cuando", "despertó,", "el", "dinosaurio", "todavía", "estaba", "allí.", "Cuando", "despertó,", "el", "dinosaurio", "todavía", "estaba", "allí.", "Cuando", "despertó,", "el", "dinosaurio", "todavía", "estaba", "allí.", "Cuando", "despertó,", "el", "dinosaurio", "todavía", "estaba", "allí.", "Cuando", "despertó,", "el", "dinosaurio", "todavía", "estaba", "allí.", "Cuando", "despertó,", "el", "dinosaurio", "todavía", "estaba", "allí.", "Cuando", "despertó,", "el", "dinosaurio", "todavía", "estaba", "allí.");
int charCount = aLongStoryStreamAgain.parallel().reduce(0, (count, word) -> {
System.out.println("Count: "+ count + " , Word: " + word.length());
return count + word.length();
}, (x,y)-> {
System.out.println("X: "+ x + " , Y: " + y);
return x + y;
});
System.out.println(charCount);
La operación de reduce de Stream en Java https://www.delftstack.com/es/howto/java/stream-reduce-in-java/
Para el reduce(valorInicial, BinaryFunction, BinaryOperator) tuve que ajustar el stream que fuera de tipo String porque sino me marca error ya que dentro de la lamda no infiere el tipo de los objetos que pasa como parámetros y pongo el código funcional y el error que me marcaba antes, ya que es ilustrativo, adicional, al final dejo el código para que se ejecute el BinaryOperator, ya que solo actúa cuando se opera sobre un parallelStream
Stream<String> aLongStoryStream = Stream.of("Cuando", "despertó,", "el", "dinosaurio", "todavía", "estaba", "allí.");
Integer sumChars = aLongStoryStream.reduce(0, (count, word) -> count+word.length(), (count1,count2) -> count1+count2);
#Result 48
#ERROR:
where U,T are type-variables:
U extends Object declared in method <U>reduce(U,BiFunction<U,? super T,U>,BinaryOperator<U>)
T extends Object declared in interface Stream
##Para que se ejecute el BinaryOperator:
Stream<String> aLongStoryStream = Stream.of("Cuando", "despertó,", "el", "dinosaurio", "todavía", "estaba", "allí.");
Integer sumChars = aLongStoryStream.parallel().reduce(0, (count, word) -> count+word.length(), (count1,count2) -> count1+count2);
#Result 48
Me gutaría saber que hace flatMap y que caso de uso práctico se le pude dar.
No logro entender el funcionamiento de reduce(valorInicial, BinaryFunction, BinaryOperator) ni por las curvas, esta como complicadito
El método reduce en Streams de Java te permite combinar todos los elementos de un Stream en un único valor. Puedes pensar en ello como una forma de resumir los elementos del Stream en uno solo.
Los operadores terminales MIN y MAX funcionan al revés en mi código :S
Stream<Integer> bigNumbers = Stream.of(500,200, 300);
Stream<Integer> stream = bigNumbers.sorted();
Optional<Integer> optional = stream.min(Integer::min);
System.out.println( "Mínimo: " + optional.get() );
Stream<Integer> bigNumbers1 = Stream.of(500,200, 300);
Stream<Integer> stream1 = bigNumbers1.sorted();
Optional<Integer> optional1 = stream1.max(Integer::max);
System.out.println( "Máximo: " + optional1.get() );
Salida en consola :
Mínimo: 500
Máximo: 200
Un ejemplito de reduce
https://www.arquitecturajava.com/java-stream-reduce-eliminando-bucles/
Un poco confundido con el redue
Interesante API, estudiarla mas a profundidad para impementarla…
Estupendo, muchas gracias instructor Sinuhé por tomarte el tiempo de explicar cada uno de los métodos principales que actúan como operaciones finales para los Stream.
Gracias
Excelente info, gracias
Gracias por la información y resumen 😃
Muy bueno, gracias.
Genial! Aún me falta comprender bien el reduce, pero todo lo demás está claro!
¿Quieres ver más aportes, preguntas y respuestas de la comunidad?