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

Operador de Referencia

16/39
Recursos

Aportes 26

Preguntas 5

Ordenar por:

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

The double colon ( :: ) operator, also known as method reference operator in Java, is used to call a method by referring to it with the help of its class directly. They behave exactly as the lambda expressions. The only difference it has from lambda expressions is that this uses direct reference to the method by name instead of providing a delegate to the method.

Method reference or double colon operator can be used to refer:

  1. A static method: (ClassName::methodName)

  2. An instance method: (objectOfClass::methodName)

  3. A constructor: (super::methodName)

Según entiendo hay 3 maneras de imprimir los datos de la lista que estamos generando:


Definiendo la impresión dentro del consumidor y luego este lo pasamos como parámetro al método de la lista.

				Consumer<String> printer = text -> System.out.println(text);
				teachers.forEach(printer);

Definiendo la impresión como consumidor dentro del parámetro del método.

				teachers.forEach(e -> System.out.println(e));

Usando un operador por refencía, referenciando al método que se encarga de imprimir los datos.

				teachers.forEach(System.out::println);

Si no les quedó claro , les pongo un ejemplo sencillo de como usar una función existente en tu código:

package com.platzi.functional._06_reference_operator;

public class TestPrint {
	
	public static void imprimirNombres(String str) {
		System.out.println(str + " Soy Estudiante!!");
	}

}


package com.platzi.functional._06_reference_operator;

import java.util.Arrays;
import java.util.List;
import java.util.function.Consumer;

public class NombresUtils {
	
	public static void main(String[] args) {
		List<String> profesores = getList("Nicloas","Juan","Zulema");
		
		/*
		Consumer<String> printer = texto -> System.out.println(texto);
		profesores.forEach(printer);
		System.out.println("////////////////////////");
		profesores.forEach(System.out::println);
		System.out.println("////////////////////////");*/
		profesores.forEach(TestPrint::imprimirNombres);
		
	}
	
	static <T> List<T> getList(T... elements){
		return Arrays.asList(elements);
	}

}

public class NombresUtils {
    public static void main(String[] args) {
        List<String> teachers = getList("Nico", "Juan", "Pepito");
        Consumer<String> printer = text -> System.out.println(text);

        teachers.forEach(printer);
        System.out.println("-------");
        teachers.forEach(e -> System.out.println(e));
        System.out.println("-------");
        teachers.forEach(System.out::println);
    }

    static <T> List<T> getList(T... elements){
        return Arrays.asList(elements);
    }
}

Muy interesante, pero tendriamos que estar muy pendientes de donde poder utilizarlo, la ventaja que IntelliJ nos ayuda a saber donde lo podemos usar.

Con el operador de referencia vamos a poder llamar métodos de otras clases ya establecidos en la aplicación de una forma más sencilla siempre y cuando cumpla las condiciones donde lo vayamos a utilizar. Gracias por explicar esto instructor Sinuhé.

Los metodos son funciones que estan ligado a un objeto o una clase

Una clase muy buena. Nunca terminé de entender la funcionalidad del operador de referencia ::

Wow que cool, justo venia pensando que este paradigma de programación era muy difícil de implementar en proyectos que ya estuvieran hechos 100% en POO porque habitat que re escribir métodos a functions.

Un video que me sirvió para entender un poco mejor.
https://www.youtube.com/watch?v=wMvaoTixHNg

Por acá dejó Link con información más completa del operador de referencia en java y con varios ejemplos:

https://mkyong.com/java8/java-8-method-references-double-colon-operator/

Oracle documentation for method reference operator

https://docs.oracle.com/javase/tutorial/java/javaOO/methodreferences.html

In resume, don’t re-invent the wheel, if you have a method that already do what you wanna do, just use it by referencing it with operator.

        profesores.forEach( x -> System.out.println(x));
        System.out.printf("----------plazi-----");

        Consumer<String> printer = text -> System.out.println(text);
        profesores.forEach(printer);

        System.out.printf("----------plazi-----");
        profesores.forEach(System.out::println);

Referencia del Metodo

:0

Imposible

Para poder usar metodo como funciones de de contar con los mismo metodo y regresar el mismo resultado

Para asi podemos usar el operador de referecias

Super 😃

Excelente info

Genial

Algo genial de IntelliJ es que te dice cuándo se puede usar un method reference en el código 😄

Una Maravilla

Muy interesante