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

No tienes acceso a esta clase

¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera

¿Qué son los Stream listeners?

24/39
Recursos

Aportes 14

Preguntas 3

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad?

He seguido con atención los cursos de Backend en Java y hasta ahora no he visto nada de Generics (lo que sé de Generics lo aprendí por cuenta). En este curso se utiliza mucho ejemplos con generics. El curso de Avanzado de Java SE debe tocar de formas mas profunda Java Collections y Generics.

Intermediate Operations:

  1. map: The map method is used to returns a stream consisting of the results of applying the given function to the elements of this stream.
    List number = Arrays.asList(2,3,4,5); List square = number.stream().map(x->x*x).collect(Collectors.toList());

  2. filter: The filter method is used to select elements as per the Predicate passed as argument.
    List names = Arrays.asList("Reflection","Collection","Stream"); List result = names.stream().filter(s->s.startsWith("S")).collect(Collectors.toList());

  3. sorted: The sorted method is used to sort the stream.
    List names = Arrays.asList("Reflection","Collection","Stream"); List result = names.stream().sorted().collect(Collectors.toList());

Terminal Operations:

  1. collect: The collect method is used to return the result of the intermediate operations performed on the stream.
    List number = Arrays.asList(2,3,4,5,3); Set square = number.stream().map(x->x*x).collect(Collectors.toSet());

  2. forEach: The forEach method is used to iterate through every element of the stream.
    List number = Arrays.asList(2,3,4,5); number.stream().map(x->x*x).forEach(y->System.out.println(y));

  3. reduce: The reduce method is used to reduce the elements of a stream to a single value.
    The reduce method takes a BinaryOperator as a parameter.
    List number = Arrays.asList(2,3,4,5); int even = number.stream().filter(x->x%2==0).reduce(0,(ans,i)-> ans+i);

siempre sera una operacion final cuando retorna algo que no sea otro stream, si retrona un stream sera una operacion intermedia

Ejemplo básico del uso de peek:

List<String> stringList = UtilsName.getList("123456", "1", "12", "1234", "555");

stringList.stream()
        .peek(number -> System.out.println("Dato: " + number))
        .filter(number -> number.contains("34"))
        .peek(number -> System.out.println(" - Este dato contiene 34"))
        .map(number -> " - Contenido adicional para el Print del Foreach " + number)
        .forEach(System.out::println);
Dato: 123456
 - Este dato contiene 34
 - Contenido adicional para el Print del Foreach 123456
Dato: 1
Dato: 12
Dato: 1234
 - Este dato contiene 34
 - Contenido adicional para el Print del Foreach 1234
Dato: 555

OK entonces los Stream no parecen tan utiles si en cada operacion ten emos que generar un nuevo tipo de variable, esto haria que el codigo sea muuy feo, Pero lo vimos en el modulo anterior... CHEINING. ES NUESTRA SOLUCION

Operacion final si te regresa algo o no, si te regresa un string es una operaciones intermedia

Estupenda clase instructor Sinuhé, por medio del uso chaining se puede aprovechar mucho más los streams.

void es un dato final

“Una vez consumido un Stream ya no puede volver a utilizarse”

Los Stream permiten realizar operaciones en los datos de manera más concisa y eficiente en comparación con los enfoques tradicionales que implican bucles explícitos. Puedes realizar operaciones como filtrado, transformación, agrupación y reducción utilizando métodos de Stream.

En Java, Stream es una característica que se introdujo en Java 8 como parte del paquete java.util.stream. Un Stream es una secuencia de elementos que se puede procesar de manera funcional. Proporciona una forma más elegante y declarativa de realizar operaciones en colecciones de datos, como listas, conjuntos y mapas.

Genial.

Super 😃