boxed() es un metodo de IntStream que convierte el IntStream en un Stream de enteros, es decir, Stream<Integer>
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
No tienes acceso a esta clase
¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera
No se trata de lo que quieres comprar, sino de quién quieres ser. Aprovecha el precio especial.
Antes: $249
Paga en 4 cuotas sin intereses
Termina en:
Sinuhé Jaime Valencia
Aportes 15
Preguntas 1
boxed() es un metodo de IntStream que convierte el IntStream en un Stream de enteros, es decir, Stream<Integer>
Los Collectors son utilizados para convertir un Stream
a una estructura de datos que contenga los elementos del flujo (como List
o Map
), por ende, se trata de una operación terminal.
Por ejemplo, para obtener una List<LocalDate>
a partir de fechas dadas como String
:
List<String> fechasString = Arrays.asList("2022-01-01", "2022-01-06", "2022-05-01", "2022-11-02", "2022-12-31");
List<LocalDate> fechas = fechasString.stream()
.map(s -> s.split("-")) //Divido la fecha en un array de strings
.map(d -> LocalDate.of(Integer.parseInt(d[0]), Integer.parseInt(d[1]), Integer.parseInt(d[2]))) //Convierto el array de strings a LocalDate
.collect(Collectors.toList()); //Convierto el Stream de LocalDate a List<LocalDate>
Otra conversión frecuente es a Map
:
Map<Integer, String> mapaPersonas = listaPersonas.stream()
.collect(Collectors.toMap(
p -> p.getId(), // Key para agregar al Map
p -> p.getNombre() + " " + p.getApellido() // Value
));
IntStream boxed() returns a Stream consisting of the elements of this stream, each boxed to an Integer.
Note: IntStream boxed() is a intermediate operation. These operations are always lazy. Intermediate operations are invoked on a Stream instance and after they finish their processing, they give a Stream instance as output.
Syntax:
Stream<Integer> boxed()
Parameters:
Stream: A sequence of elements supporting sequential and parallel aggregate operations.
Integer: The Integer class wraps a value of the primitive type int in an object. An object of type Integer contains a single field whose type is int.
Return Value: The function returns a Stream boxed to an Integer.
Apuntes
Necesitamos generar un resultado al operar sobre un Stream y como no todos implementan Stream, es decir, un Stream de Java puede que no lo use un cliente en JavaScript o un código en Python o alguna API, entonces debemos hacer que estos datos sean más manejables, convertir el Stream en algo que se pueda operar, no solo en Java, sino desde otros lugares. Vamos a convertir nuestro Stream de enteros a una lista de enteros porque los números los podemos procesar fácilmente.
El resultado del filter lo vamos a convertir a boxed, lo cual representa que nuestro Stream que está trabajando sobre enteros pero de tipo Stream(IntStream) va a convertirse solamente en un Stream de Integer, con boxed hacemos que el Stream trabaje sobre datos específicos, como este caso Integer, no sobre Stream de enteros.
Con lo anterior, podemos recopilar los datos de un Stream en una estructura de datos, aquí entra en juego el método collect.
Con collect podemos dar una manera de convertir un Stream de datos en una estructura ya física, en una estructura que no tiene operadores, simplemente tiene los datos en concreto, que fueron el resultado de aplicar múltiples operaciones a un Stream.
Tenemos Collectors para convertir a mapa, lista, set.
Con Collectors.toList() usamos el que convierte a lista, en este caso devolverá una lista de Integers
You can find more information about ‘toCollection’ method here.
Excelente clase instructor Sinuhé, a través de los métodos .boxed y .collect vamos poder generar una estructura de datos más adaptable de los Stream para poder usarlos externamente.
con boxed convertimos en otro tipo de string
Genial
con collet recogemos esos datos y creamos en una estructura ya fisica o datos en concreto
GRacias
Genial muchas gracias!
¿Hay algo parecido a JOIN de SQL en programación funcional con Java?
Si tuviésemos un Stream<Integer> el cual al final solo me otorga la suma de una cantidad de dígitos en una lista, como podríamos obtener únicamente ese resultado sin bloquear el flujo y sin que este este contenido en un Stream?
Tengo un proyecto con un front y un back, y a su vez necesito consumir un servicio externo.
desde el front envío una lista de elementos que deberán ser procesados consultando ese api de tercero. el tema es que el servicio que debo consultar sólo procesa una petición a la vez y no quiero crear un cuello botella en mi back, por lo que quisiera disparar varias consultas paralelas a ese servicio de terceros.
Se puede hacer este tipo de implementaciones con el parallel de Stream?
Se puede hacer un Collector de una clase especifica? si se recorre un array de string separados por espacio que contiene el valor de los campos de la clase especifica?
¿Quieres ver más aportes, preguntas y respuestas de la comunidad?