Introducción a la programación Funcional

1

¿Qué es la Programación Funcional?

Entendiendo las partes de la programación funcional

2

¿Qué es una función en Java?

3

Funciones como ciudadanos de primera clase

4

Funciones puras

5

Entendiendo los efectos secundarios

6

Funciones de orden mayor

7

Funciones lambda

8

Inmutabilidad

Functional Programming en Java

9

Repositorio del curso

10

Configuración del entorno de trabajo

11

Revisando el paquete java.util.function: Function

12

Revisando el paquete java.util.function: Predicate

13

Revisando el paquete java.util.function: Consumer y Supplier

14

Revisando el paquete java.util.function: Operators y BiFunction

15

Entendiendo dos jugadores clave: SAM y FunctionalInterface

16

Operador de Referencia

17

Analizando la inferencia de tipos

18

Comprendiendo la sintaxis de las funciones lambda

19

Usando metodos default en nuestras interfaces

20

Dándole nombre a un viejo amigo: Chaining

21

Entendiendo la composición de funciones

Optional y Streams: Datos mas interesantes

22

La clase Optional

23

Entendiendo los Streams

24

¿Qué son los Stream listeners?

25

Operaciones y Collectors

26

Streams de tipo específico y Paralelismo

27

Operaciones Terminales

28

Operaciones Intermedias

29

Collectors

Todo junto: Proyecto Job-search

30

job-search: Un proyecto para encontrar trabajo

31

Vista rápida a un proyecto de Gradle

32

Revisando las opciones para nuestro CLI

33

Librerías adicionales para nuestro proyecto

34

Entendiendo la API de jobs

35

Diseñando las Funciones Constructoras de nuestro Proyecto

36

Agregando validaciones de datos

37

Diseñando las funciones de transformacion de datos

38

Creando flujos extras de transformación de Datos

Conclusiones

39

Un repaso a lo aprendido

Aún no tienes acceso a esta clase

Crea una cuenta y continúa viendo este curso

Entendiendo los Streams

23/39
Recursos

Aportes 17

Preguntas 1

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad? Crea una cuenta o inicia sesión.

Les dejo un pequeño ayuda memorias 😃

Se puede ver a un Stream como un iterador con esteroides, aumentado con el paradigma funcional. Por supuesto, esto es una forma muy básica de definirlo, pero al inicio facilita mucho imaginarlos de esta manera.

¿Cuales son los contras y los pros de usar For o Stream? ¿Por qué usar Stream cuando For parece ser una forma más fácil?

Para practicar los streams recomiendo Codewars ya hay muchos ejercicios en los que se pueden usar para simplificar más el código

In this blog you can find more information.

Imaginemos cuando trabajemos con la clase stream o un stream que es un flujo de datos. SÍ un flujo como si estos vinieran de una tubería o una corriente de la cual nosotros tenemos el control de esta (abrir y cerrarla a nuestro antojo). Este flujo tiene un recorrido que nosotros decidimos cómo trabajar con este.

Como en este ejemplo, de un flujo de datos filtramos los valores que** son peces** , los empacamos (Convertimos en un Objeto pez) y están listos para distribución. (Tenemos de retorno un listado de Objeto Pez).

¿Que son los Streams?

Los Stream se utilizan para procesar colecciones de objetos. Una secuencia es una secuencia de objetos que admite varios métodos que se pueden canalizar para producir el resultado deseado.

Las características de la secuencia de Java son:

  • Un flujo no es una estructura de datos, sino que toma información de las colecciones.

  • Los flujos no cambian la estructura de datos original, solo proporcionan el resultado según los métodos canalizados.

  • Cada operación intermedia se ejecuta de forma perezosa y devuelve un flujo como resultado, por lo que se pueden canalizar varias operaciones intermedias. Las operaciones de terminal marcan el final de la secuencia y devuelven el resultado.

No tenia idea que los streams son de un solo uso

Con la clase Optional podemos hacer que al prcesar datos, lo hagamos de una forma mas segura y los datos puedan estar mas protegidos. Pero que pasa si debemos operar sobre multiples de datos? En Java 8 se agrego la clase Streams. como un video que es un flujo de datos y ser van consumiendo. Lo mismo es la clase Streams: es una especie de lista que tiene elementos y se pueden interar, la diferencia entre Listas, Colecciones o Streams es que un Streams es auto-iterable; Cuando tu creas una lista tienes que ir haciendo las conecciones que vas operando, cada uno de los elementos de la lista, es muy comun que tengas un "lista" y despues tengas un "for" elemento en lista y de internamente hagas operaciones.

si uso el foreach() de que manera puedo ver en indice i?

A lo que entendí mas o menos, los stream son como el linq en C#

Excelente herramienta, es como una combinación entre ciclos y arreglos, eso sí toca estar atentos de cómo se utiliza y verificar en qué momento se emplea. Gracias por la clase instructor Sinuhé.

La clase stream es un espcie de lista que tiene elementos y se pueden iterar, los streams son auto-iterables

Cuando se genera un Stream solo puede ser consumido una vez

Genial, pero en la parte donde colocamos emphasisCourses.forEach(System.out::println); Este imprime claramente todos los elementos, pero a la final el forEach no es una especie de iterador??? no le estaria diciendo que imprima todos los elementos de igual forma?.

Introduced in Java 8, the Stream API is used to process collections of objects. A stream is a sequence of objects that supports various methods which can be pipelined to produce the desired result.
The features of Java stream are –

  1. A stream is not a data structure instead it takes input from the Collections, Arrays or I/O channels.

  2. Streams don’t change the original data structure, they only provide the result as per the pipelined methods.

  3. Each intermediate operation is lazily executed and returns a stream as a result, hence various intermediate operations can be pipelined. Terminal operations mark the end of the stream and return the result.

Super! Adiós for 😃