SlideShare une entreprise Scribd logo
1  sur  16
Télécharger pour lire hors ligne
Eric Gustavo Coronel Castillo
gcoronelc.blogspot.com
PROGRAMACIÓN
FUNCIONAL CON JAVA
Temas
 Orígenes
 Precedente
 Interfaces Funcionales
 Expresiones Lambda
 Streams
Orígenes
 El cálculo lambda fue desarrollado por Alonso Church en la década
de los años 30 con el objeto de dar una teoría general de las
funciones.
 El cálculo lambda ha sido empleado como fundamento conceptual
de los lenguajes de programación, aportando:
– Una sintaxis básica
– Una semántica para el concepto de función como proceso de
transformación de argumentos en resultados
 El cálculo lambda sirve como el modelo computacional de
lenguajes que implementan la programación funcional, como Lisp,
Haskell, Ocaml, etc.
 Características del cálculo lambda como expresiones lambda se
han incorporado en muchos lenguajes de programación
ampliamente utilizados, ahora muy recientemente Java 8.
Precedente
 Clases anónimas
– Una clase anónima siempre debe ser una subclase de
otra clase existente o bien debe implementar alguna
interfaz.
– La definición de la clase anónima y la creación de una
instancia de la misma representan acciones inseparables
que se realizan en la misma línea de código.
Precedente
public static void main(String[] args) {
List<String> lista;
lista = Arrays.asList("Gustavo","Guino","Sergio","Cesar","Ernesto");
System.out.println(lista);
Collections.sort(lista, new Comparator<String>() {
@Override
public int compare(String o1, String o2) {
return o1.compareTo(o2);
}
});
System.out.println(lista);
}
run:
[Gustavo, Guino, Sergio, Cesar, Ernesto]
[Cesar, Ernesto, Guino, Gustavo, Sergio]
Interfaces Funcionales
 Son interfaces cuya característica es que tienen solo un
método abstracto.
 Normalmente, su implementación es como una clase
anónima, definida en la misma línea de código donde se
crea el objeto de la clase.
 Son la base de las expresiones lambda.
 Ejemplos: Comparator, Runnable, ActionListener, Callable.
Interfaces Funcionales
@FunctionalInterface
public interface IMate {
int opera(int n1, int n2);
}
public static void main(String[] args) {
IMate o = new IMate() {
@Override
public int opera(int n1, int n2) {
return (n1 + n2);
}
};
System.out.println("5 + 8 = " + o.opera(5, 8));
}
Interfaces Funcionales
public static void main(String[] args) {
IMate sumar = (a,b) -> (a+b);
IMate restar = (a,b) -> (a-b);
System.out.println("5 + 8 = " + sumar.opera(5, 8));
System.out.println("8 - 5 = " + restar.opera(8, 5));
}
run:
5 + 8 = 13
8 - 5 = 3
Expresiones Lambda
 Una expresión lambda se compone de tres partes:
– Si es un solo argumento, no necesita los paréntesis.
– Si es una sola sentencia, no necesita las llaves.
Expresiones Lambda
public static void main(String[] args) {
List<String> lista = Arrays.asList("Gustavo", "Guino",
"Sergio", "Cesar", "Ernesto");
System.out.println(lista);
Collections.sort(lista, (o1, o2) -> o1.compareTo(o2));
System.out.println(lista);
}
run:
[Gustavo, Guino, Sergio, Cesar, Ernesto]
[Cesar, Ernesto, Guino, Gustavo, Sergio]
Expresiones Lambda
public class Prueba06 extends JFrame{
private JButton button;
public Prueba06() throws HeadlessException {
super("Demo Clásico");
setLayout(new GridLayout(1, 1));
setSize(200, 200);
setLocationRelativeTo(null);
button = new JButton("Saludar");
add(button);
button.addActionListener( e ->
JOptionPane.showMessageDialog(rootPane, "Hola Gustavo."));
}
public static void main(String[] args) {
Prueba06 bean = new Prueba06();
bean.setVisible(true);
}
}
ActionListener
Streams
 Una secuencia de elementos que soportan operaciones
secuenciales y paralelas.
public static void main(String[] args) {
List<Integer> lista =
Arrays.asList(34, 76, 23, 78, 15, 80, 45, 67);
lista.stream()
.filter( n -> n > 50)
.sorted()
.forEach( n -> System.out.println(n));
}
run:
67
76
78
80
Streams
 Soportan diferentes tipos de operaciones.
public static void main(String[] args) {
List<Integer> lista =
Arrays.asList(34, 76, 23, 78, 15, 80, 45, 67);
int suma = lista.stream()
.filter( n -> n > 50)
.mapToInt(n -> n.intValue())
.sum();
System.out.println("Suma: " + suma);
}
run:
Suma: 301
Streams
 Soportan diferentes tipos de operaciones.
public static void main(String[] args) {
int suma = IntStream
.of(34, 76, 23, 78, 15, 80, 45, 67)
.filter( n -> n > 50)
.sum();
System.out.println("Suma: " + suma);
}
run:
Suma: 301
Streams
 Soportan diferentes tipos de operaciones.
public static void main(String[] args) {
Stream
.of("Gustavo","Guino","Sergio","Cesar","Ernesto")
.map(s -> s.toUpperCase())
.sorted()
.forEach(System.out::println);
}
run:
CESAR
ERNESTO
GUINO
GUSTAVO
SERGIO
Eric Gustavo Coronel Castillo
gcoronelc.blogspot.com
Gracias

Contenu connexe

Tendances

Programación Orientada a Objetos - atributos y métodos
Programación Orientada a Objetos - atributos y métodosProgramación Orientada a Objetos - atributos y métodos
Programación Orientada a Objetos - atributos y métodosAlvaro Enrique Ruano
 
Algoritmos Conceptos Basicos - www.ingfiis.tk
Algoritmos Conceptos Basicos - www.ingfiis.tkAlgoritmos Conceptos Basicos - www.ingfiis.tk
Algoritmos Conceptos Basicos - www.ingfiis.tkLaurence HR
 
Herramientas y Tecnologías para la Web
Herramientas y Tecnologías para la WebHerramientas y Tecnologías para la Web
Herramientas y Tecnologías para la WebErick David Juarez
 
¿Como hacer un pseudocodigo y diagrama de flujo?
¿Como hacer un pseudocodigo y diagrama de flujo?¿Como hacer un pseudocodigo y diagrama de flujo?
¿Como hacer un pseudocodigo y diagrama de flujo?grachika
 
Actividad 10: Reporte de polimorfismo, herencia & encapsulamiento
Actividad  10: Reporte de polimorfismo, herencia & encapsulamientoActividad  10: Reporte de polimorfismo, herencia & encapsulamiento
Actividad 10: Reporte de polimorfismo, herencia & encapsulamientograchika
 
Diagramas de Flujo
Diagramas de FlujoDiagramas de Flujo
Diagramas de Flujoastaroth97
 
Lenguajes lógicos definicion y funcion
Lenguajes lógicos definicion y funcionLenguajes lógicos definicion y funcion
Lenguajes lógicos definicion y funcionIsrael Castillo Cruz
 
Collections In Java
Collections In JavaCollections In Java
Collections In JavaBinoj T E
 
Java pilas (Stacks) y colas (Queues)
Java pilas (Stacks) y colas (Queues)Java pilas (Stacks) y colas (Queues)
Java pilas (Stacks) y colas (Queues)Juan Astudillo
 
Como migrar una base de datos de mysql a power designer
Como migrar una base de datos de mysql a power designerComo migrar una base de datos de mysql a power designer
Como migrar una base de datos de mysql a power designerAlex Bernal
 
Agente Inteligente Para El DiagnóStico MéDico
Agente Inteligente Para El DiagnóStico MéDicoAgente Inteligente Para El DiagnóStico MéDico
Agente Inteligente Para El DiagnóStico MéDicoSantiago Ortega
 

Tendances (20)

Java 8 lambda
Java 8 lambdaJava 8 lambda
Java 8 lambda
 
Programación Orientada a Objetos - atributos y métodos
Programación Orientada a Objetos - atributos y métodosProgramación Orientada a Objetos - atributos y métodos
Programación Orientada a Objetos - atributos y métodos
 
Algoritmos Conceptos Basicos - www.ingfiis.tk
Algoritmos Conceptos Basicos - www.ingfiis.tkAlgoritmos Conceptos Basicos - www.ingfiis.tk
Algoritmos Conceptos Basicos - www.ingfiis.tk
 
Test
TestTest
Test
 
LibreríAs De Java
LibreríAs De JavaLibreríAs De Java
LibreríAs De Java
 
Herramientas y Tecnologías para la Web
Herramientas y Tecnologías para la WebHerramientas y Tecnologías para la Web
Herramientas y Tecnologías para la Web
 
Modulos en Python
Modulos en PythonModulos en Python
Modulos en Python
 
¿Como hacer un pseudocodigo y diagrama de flujo?
¿Como hacer un pseudocodigo y diagrama de flujo?¿Como hacer un pseudocodigo y diagrama de flujo?
¿Como hacer un pseudocodigo y diagrama de flujo?
 
Árboles binarios, ABB y AVL
Árboles binarios, ABB y AVLÁrboles binarios, ABB y AVL
Árboles binarios, ABB y AVL
 
Actividad 10: Reporte de polimorfismo, herencia & encapsulamiento
Actividad  10: Reporte de polimorfismo, herencia & encapsulamientoActividad  10: Reporte de polimorfismo, herencia & encapsulamiento
Actividad 10: Reporte de polimorfismo, herencia & encapsulamiento
 
Diagramas de Flujo
Diagramas de FlujoDiagramas de Flujo
Diagramas de Flujo
 
Pilas y colas
Pilas y colasPilas y colas
Pilas y colas
 
Lenguajes lógicos definicion y funcion
Lenguajes lógicos definicion y funcionLenguajes lógicos definicion y funcion
Lenguajes lógicos definicion y funcion
 
Program control statements in c#
Program control statements in c#Program control statements in c#
Program control statements in c#
 
Collections In Java
Collections In JavaCollections In Java
Collections In Java
 
Java pilas (Stacks) y colas (Queues)
Java pilas (Stacks) y colas (Queues)Java pilas (Stacks) y colas (Queues)
Java pilas (Stacks) y colas (Queues)
 
Operator overloading
Operator overloadingOperator overloading
Operator overloading
 
03 java poo_parte_2
03 java poo_parte_203 java poo_parte_2
03 java poo_parte_2
 
Como migrar una base de datos de mysql a power designer
Como migrar una base de datos de mysql a power designerComo migrar una base de datos de mysql a power designer
Como migrar una base de datos de mysql a power designer
 
Agente Inteligente Para El DiagnóStico MéDico
Agente Inteligente Para El DiagnóStico MéDicoAgente Inteligente Para El DiagnóStico MéDico
Agente Inteligente Para El DiagnóStico MéDico
 

En vedette (8)

Buenas Practicas en el Desarrollo de Software
Buenas Practicas en el Desarrollo de SoftwareBuenas Practicas en el Desarrollo de Software
Buenas Practicas en el Desarrollo de Software
 
SEMINARIO: ACCESO A BASE DE DATOS CON JDBC
SEMINARIO: ACCESO A BASE DE DATOS CON JDBCSEMINARIO: ACCESO A BASE DE DATOS CON JDBC
SEMINARIO: ACCESO A BASE DE DATOS CON JDBC
 
Java Fundamentos 01 - Introducción
Java Fundamentos 01 - IntroducciónJava Fundamentos 01 - Introducción
Java Fundamentos 01 - Introducción
 
DESARROLLADOR DE APLICACIONES DE ESCRITORIO CON JDBC
DESARROLLADOR DE APLICACIONES DE ESCRITORIO CON JDBCDESARROLLADOR DE APLICACIONES DE ESCRITORIO CON JDBC
DESARROLLADOR DE APLICACIONES DE ESCRITORIO CON JDBC
 
Java web Lección 04 - JSTL
Java web Lección 04 - JSTLJava web Lección 04 - JSTL
Java web Lección 04 - JSTL
 
Java Web 00 - Contexto
Java Web 00 - ContextoJava Web 00 - Contexto
Java Web 00 - Contexto
 
PROGRAMACIÓN ORIENTADA A OBJETOS
PROGRAMACIÓN ORIENTADA A OBJETOSPROGRAMACIÓN ORIENTADA A OBJETOS
PROGRAMACIÓN ORIENTADA A OBJETOS
 
Java Fundamentos - Programación Orientada a Servicios
Java Fundamentos - Programación Orientada a ServiciosJava Fundamentos - Programación Orientada a Servicios
Java Fundamentos - Programación Orientada a Servicios
 

Similaire à Java Lambda

Kit de supervivencia para Java 8 : como prepararse para Java 9
Kit de supervivencia para Java 8 :  como prepararse para Java 9Kit de supervivencia para Java 8 :  como prepararse para Java 9
Kit de supervivencia para Java 8 : como prepararse para Java 9Eudris Cabrera
 
Java 8 - Nuevas características
Java 8 - Nuevas característicasJava 8 - Nuevas características
Java 8 - Nuevas característicasFernando Petrola
 
Java 8 introducción a expresiones lambdas y api stream
Java 8  introducción a expresiones lambdas y api streamJava 8  introducción a expresiones lambdas y api stream
Java 8 introducción a expresiones lambdas y api streamEudris Cabrera
 
Java 8: Expresiones Lambdas y API Stream BarCamp RD 2016
Java 8: Expresiones Lambdas y API Stream BarCamp RD 2016Java 8: Expresiones Lambdas y API Stream BarCamp RD 2016
Java 8: Expresiones Lambdas y API Stream BarCamp RD 2016Eudris Cabrera
 
Java8 : Más allá de las Expresiones Lambdas
Java8 :  Más allá de las Expresiones LambdasJava8 :  Más allá de las Expresiones Lambdas
Java8 : Más allá de las Expresiones LambdasEudris Cabrera
 
Lambdas y API Stream #PerúJUG #Java20
Lambdas y API Stream #PerúJUG #Java20Lambdas y API Stream #PerúJUG #Java20
Lambdas y API Stream #PerúJUG #Java20Alexis Lopez
 
Introduccion rapida a SCILAB.pdf
Introduccion rapida a SCILAB.pdfIntroduccion rapida a SCILAB.pdf
Introduccion rapida a SCILAB.pdfcursosrams
 
Manuales ...
Manuales ...Manuales ...
Manuales ...elidetjc
 
Uso de las clases iostream
Uso de las clases iostreamUso de las clases iostream
Uso de las clases iostreamTensor
 
Copiade documento(2)
Copiade documento(2)Copiade documento(2)
Copiade documento(2)Pato Brito
 

Similaire à Java Lambda (20)

Kit de supervivencia para Java 8 : como prepararse para Java 9
Kit de supervivencia para Java 8 :  como prepararse para Java 9Kit de supervivencia para Java 8 :  como prepararse para Java 9
Kit de supervivencia para Java 8 : como prepararse para Java 9
 
Java 8 - Nuevas características
Java 8 - Nuevas característicasJava 8 - Nuevas características
Java 8 - Nuevas características
 
Java 8
Java 8Java 8
Java 8
 
Java 8 introducción a expresiones lambdas y api stream
Java 8  introducción a expresiones lambdas y api streamJava 8  introducción a expresiones lambdas y api stream
Java 8 introducción a expresiones lambdas y api stream
 
Java 8: Expresiones Lambdas y API Stream BarCamp RD 2016
Java 8: Expresiones Lambdas y API Stream BarCamp RD 2016Java 8: Expresiones Lambdas y API Stream BarCamp RD 2016
Java 8: Expresiones Lambdas y API Stream BarCamp RD 2016
 
Java8 : Más allá de las Expresiones Lambdas
Java8 :  Más allá de las Expresiones LambdasJava8 :  Más allá de las Expresiones Lambdas
Java8 : Más allá de las Expresiones Lambdas
 
Lambdas y API Stream #PerúJUG #Java20
Lambdas y API Stream #PerúJUG #Java20Lambdas y API Stream #PerúJUG #Java20
Lambdas y API Stream #PerúJUG #Java20
 
Apuntes scilab
Apuntes scilabApuntes scilab
Apuntes scilab
 
Apuntes scilab
Apuntes scilabApuntes scilab
Apuntes scilab
 
Introduccion rapida a SCILAB.pdf
Introduccion rapida a SCILAB.pdfIntroduccion rapida a SCILAB.pdf
Introduccion rapida a SCILAB.pdf
 
Manuales ...
Manuales ...Manuales ...
Manuales ...
 
Matlab
MatlabMatlab
Matlab
 
04 j flex
04 j flex04 j flex
04 j flex
 
Uso de las clases iostream
Uso de las clases iostreamUso de las clases iostream
Uso de las clases iostream
 
Tema 6
Tema 6Tema 6
Tema 6
 
Copiade documento(2)
Copiade documento(2)Copiade documento(2)
Copiade documento(2)
 
Diapositivas matlab
Diapositivas matlabDiapositivas matlab
Diapositivas matlab
 
Tutorial descilab
Tutorial descilabTutorial descilab
Tutorial descilab
 
Estructura basica para_c_
Estructura basica para_c_Estructura basica para_c_
Estructura basica para_c_
 
Apache spark meetup
Apache spark meetupApache spark meetup
Apache spark meetup
 

Plus de Eric Gustavo Coronel Castillo

EL MODELO DIRECTO DE DELL: TODO LO QUE HAY SOBRE LA INFORMACION
EL MODELO DIRECTO DE DELL: TODO LO QUE HAY SOBRE LA INFORMACIONEL MODELO DIRECTO DE DELL: TODO LO QUE HAY SOBRE LA INFORMACION
EL MODELO DIRECTO DE DELL: TODO LO QUE HAY SOBRE LA INFORMACIONEric Gustavo Coronel Castillo
 

Plus de Eric Gustavo Coronel Castillo (20)

Java Web JSTL
Java Web JSTLJava Web JSTL
Java Web JSTL
 
Model View Controller - MVC
Model View Controller - MVCModel View Controller - MVC
Model View Controller - MVC
 
JavaServer Page
JavaServer PageJavaServer Page
JavaServer Page
 
Java Web: Servlets
Java Web: ServletsJava Web: Servlets
Java Web: Servlets
 
Java Web - Presentación
Java Web - PresentaciónJava Web - Presentación
Java Web - Presentación
 
JAVA ORIENTADO A OBJETOS - EXCEPCIONES
JAVA ORIENTADO A OBJETOS - EXCEPCIONESJAVA ORIENTADO A OBJETOS - EXCEPCIONES
JAVA ORIENTADO A OBJETOS - EXCEPCIONES
 
JAVA ORIENTADO A OBJETOS - COLECCIONES
JAVA ORIENTADO A OBJETOS - COLECCIONESJAVA ORIENTADO A OBJETOS - COLECCIONES
JAVA ORIENTADO A OBJETOS - COLECCIONES
 
JAVA ORIENTADO A OBJETOS - ARREGLOS
JAVA ORIENTADO A OBJETOS - ARREGLOSJAVA ORIENTADO A OBJETOS - ARREGLOS
JAVA ORIENTADO A OBJETOS - ARREGLOS
 
JAVA ORIENTADO A OBJETOS - INTERFACES
JAVA ORIENTADO A OBJETOS - INTERFACESJAVA ORIENTADO A OBJETOS - INTERFACES
JAVA ORIENTADO A OBJETOS - INTERFACES
 
JAVA ORIENTADO A OBJETOS - HERENCIA
JAVA ORIENTADO A OBJETOS - HERENCIAJAVA ORIENTADO A OBJETOS - HERENCIA
JAVA ORIENTADO A OBJETOS - HERENCIA
 
JAVA ORIENTADO A OBJETOS - ALCANCE DE CLASE
JAVA ORIENTADO A OBJETOS - ALCANCE DE CLASEJAVA ORIENTADO A OBJETOS - ALCANCE DE CLASE
JAVA ORIENTADO A OBJETOS - ALCANCE DE CLASE
 
JAVA ORIENTADO A OBJETOS - SOBRECARGA
JAVA ORIENTADO A OBJETOS - SOBRECARGAJAVA ORIENTADO A OBJETOS - SOBRECARGA
JAVA ORIENTADO A OBJETOS - SOBRECARGA
 
JAVA ORIENTADO A OBJETOS - MIEMBROS DE CLASE
JAVA ORIENTADO A OBJETOS - MIEMBROS DE CLASEJAVA ORIENTADO A OBJETOS - MIEMBROS DE CLASE
JAVA ORIENTADO A OBJETOS - MIEMBROS DE CLASE
 
JAVA ORIENTADO A OBJETOS - CLASES Y OBJETOS
JAVA ORIENTADO A OBJETOS - CLASES Y OBJETOSJAVA ORIENTADO A OBJETOS - CLASES Y OBJETOS
JAVA ORIENTADO A OBJETOS - CLASES Y OBJETOS
 
Cursos Virtuales con Gustavo Coronel en UDEMY
Cursos Virtuales con Gustavo Coronel en UDEMYCursos Virtuales con Gustavo Coronel en UDEMY
Cursos Virtuales con Gustavo Coronel en UDEMY
 
JAVA ORIENTADO A OBJETOS - INTRODUCCIÓN
JAVA ORIENTADO A OBJETOS - INTRODUCCIÓNJAVA ORIENTADO A OBJETOS - INTRODUCCIÓN
JAVA ORIENTADO A OBJETOS - INTRODUCCIÓN
 
Buenas practicas para el Desarrollo de Software
Buenas practicas para el Desarrollo de SoftwareBuenas practicas para el Desarrollo de Software
Buenas practicas para el Desarrollo de Software
 
JAVA OO - TEMA 08 - COLECCIONES
JAVA OO - TEMA 08 - COLECCIONESJAVA OO - TEMA 08 - COLECCIONES
JAVA OO - TEMA 08 - COLECCIONES
 
EL MODELO DIRECTO DE DELL: TODO LO QUE HAY SOBRE LA INFORMACION
EL MODELO DIRECTO DE DELL: TODO LO QUE HAY SOBRE LA INFORMACIONEL MODELO DIRECTO DE DELL: TODO LO QUE HAY SOBRE LA INFORMACION
EL MODELO DIRECTO DE DELL: TODO LO QUE HAY SOBRE LA INFORMACION
 
ORACLE SQL
ORACLE SQLORACLE SQL
ORACLE SQL
 

Dernier

Graph Everywhere - Josep Taruella - Por qué Graph Data Science en tus modelos...
Graph Everywhere - Josep Taruella - Por qué Graph Data Science en tus modelos...Graph Everywhere - Josep Taruella - Por qué Graph Data Science en tus modelos...
Graph Everywhere - Josep Taruella - Por qué Graph Data Science en tus modelos...Neo4j
 
Instalacion de servicios windows, configuracion y aplicacion.
Instalacion de servicios windows, configuracion y aplicacion.Instalacion de servicios windows, configuracion y aplicacion.
Instalacion de servicios windows, configuracion y aplicacion.CZSOTEC
 
BBVA - GraphSummit Madrid - Caso de éxito en BBVA: Optimizando con grafos
BBVA - GraphSummit Madrid - Caso de éxito en BBVA: Optimizando con grafosBBVA - GraphSummit Madrid - Caso de éxito en BBVA: Optimizando con grafos
BBVA - GraphSummit Madrid - Caso de éxito en BBVA: Optimizando con grafosNeo4j
 
SQL server Analysis Services & SQL Server Reporting Services.pptx
SQL server Analysis Services & SQL Server Reporting Services.pptxSQL server Analysis Services & SQL Server Reporting Services.pptx
SQL server Analysis Services & SQL Server Reporting Services.pptxRAMIROANTONIOGALINDO
 
Webinar Resolucion2335 de 2023 Kubapp.pdf
Webinar Resolucion2335 de 2023 Kubapp.pdfWebinar Resolucion2335 de 2023 Kubapp.pdf
Webinar Resolucion2335 de 2023 Kubapp.pdfAnaRosaMontenegro
 
Delitos informáticos en Slideshare.pptx
Delitos informáticos en  Slideshare.pptxDelitos informáticos en  Slideshare.pptx
Delitos informáticos en Slideshare.pptxmaykolmagallanes012
 
SISTEMA INTEGRADO DE ADMINISTRACION FINANCIERA - SIAF MODULO ADMINISTRATIVO
SISTEMA INTEGRADO DE ADMINISTRACION FINANCIERA - SIAF MODULO ADMINISTRATIVOSISTEMA INTEGRADO DE ADMINISTRACION FINANCIERA - SIAF MODULO ADMINISTRATIVO
SISTEMA INTEGRADO DE ADMINISTRACION FINANCIERA - SIAF MODULO ADMINISTRATIVOELIAMARYTOVARFLOREZD
 
Tipos de pensamiento y pensamiento lógico
Tipos de pensamiento y pensamiento lógicoTipos de pensamiento y pensamiento lógico
Tipos de pensamiento y pensamiento lógicoMaxCaldern2
 
MacOS SISTEMA OPERATIVO CARACTERISTICAS.pptx
MacOS SISTEMA OPERATIVO CARACTERISTICAS.pptxMacOS SISTEMA OPERATIVO CARACTERISTICAS.pptx
MacOS SISTEMA OPERATIVO CARACTERISTICAS.pptxcalzadillasluis134
 
Estructura del lenguaje c++. Operaciones básicas y su jerarquía aplicada en e...
Estructura del lenguaje c++. Operaciones básicas y su jerarquía aplicada en e...Estructura del lenguaje c++. Operaciones básicas y su jerarquía aplicada en e...
Estructura del lenguaje c++. Operaciones básicas y su jerarquía aplicada en e...FabianCruz73
 
ISDEFE - GraphSummit Madrid - ARETA: Aviation Real-Time Emissions Token Accre...
ISDEFE - GraphSummit Madrid - ARETA: Aviation Real-Time Emissions Token Accre...ISDEFE - GraphSummit Madrid - ARETA: Aviation Real-Time Emissions Token Accre...
ISDEFE - GraphSummit Madrid - ARETA: Aviation Real-Time Emissions Token Accre...Neo4j
 

Dernier (11)

Graph Everywhere - Josep Taruella - Por qué Graph Data Science en tus modelos...
Graph Everywhere - Josep Taruella - Por qué Graph Data Science en tus modelos...Graph Everywhere - Josep Taruella - Por qué Graph Data Science en tus modelos...
Graph Everywhere - Josep Taruella - Por qué Graph Data Science en tus modelos...
 
Instalacion de servicios windows, configuracion y aplicacion.
Instalacion de servicios windows, configuracion y aplicacion.Instalacion de servicios windows, configuracion y aplicacion.
Instalacion de servicios windows, configuracion y aplicacion.
 
BBVA - GraphSummit Madrid - Caso de éxito en BBVA: Optimizando con grafos
BBVA - GraphSummit Madrid - Caso de éxito en BBVA: Optimizando con grafosBBVA - GraphSummit Madrid - Caso de éxito en BBVA: Optimizando con grafos
BBVA - GraphSummit Madrid - Caso de éxito en BBVA: Optimizando con grafos
 
SQL server Analysis Services & SQL Server Reporting Services.pptx
SQL server Analysis Services & SQL Server Reporting Services.pptxSQL server Analysis Services & SQL Server Reporting Services.pptx
SQL server Analysis Services & SQL Server Reporting Services.pptx
 
Webinar Resolucion2335 de 2023 Kubapp.pdf
Webinar Resolucion2335 de 2023 Kubapp.pdfWebinar Resolucion2335 de 2023 Kubapp.pdf
Webinar Resolucion2335 de 2023 Kubapp.pdf
 
Delitos informáticos en Slideshare.pptx
Delitos informáticos en  Slideshare.pptxDelitos informáticos en  Slideshare.pptx
Delitos informáticos en Slideshare.pptx
 
SISTEMA INTEGRADO DE ADMINISTRACION FINANCIERA - SIAF MODULO ADMINISTRATIVO
SISTEMA INTEGRADO DE ADMINISTRACION FINANCIERA - SIAF MODULO ADMINISTRATIVOSISTEMA INTEGRADO DE ADMINISTRACION FINANCIERA - SIAF MODULO ADMINISTRATIVO
SISTEMA INTEGRADO DE ADMINISTRACION FINANCIERA - SIAF MODULO ADMINISTRATIVO
 
Tipos de pensamiento y pensamiento lógico
Tipos de pensamiento y pensamiento lógicoTipos de pensamiento y pensamiento lógico
Tipos de pensamiento y pensamiento lógico
 
MacOS SISTEMA OPERATIVO CARACTERISTICAS.pptx
MacOS SISTEMA OPERATIVO CARACTERISTICAS.pptxMacOS SISTEMA OPERATIVO CARACTERISTICAS.pptx
MacOS SISTEMA OPERATIVO CARACTERISTICAS.pptx
 
Estructura del lenguaje c++. Operaciones básicas y su jerarquía aplicada en e...
Estructura del lenguaje c++. Operaciones básicas y su jerarquía aplicada en e...Estructura del lenguaje c++. Operaciones básicas y su jerarquía aplicada en e...
Estructura del lenguaje c++. Operaciones básicas y su jerarquía aplicada en e...
 
ISDEFE - GraphSummit Madrid - ARETA: Aviation Real-Time Emissions Token Accre...
ISDEFE - GraphSummit Madrid - ARETA: Aviation Real-Time Emissions Token Accre...ISDEFE - GraphSummit Madrid - ARETA: Aviation Real-Time Emissions Token Accre...
ISDEFE - GraphSummit Madrid - ARETA: Aviation Real-Time Emissions Token Accre...
 

Java Lambda

  • 1. Eric Gustavo Coronel Castillo gcoronelc.blogspot.com PROGRAMACIÓN FUNCIONAL CON JAVA
  • 2. Temas  Orígenes  Precedente  Interfaces Funcionales  Expresiones Lambda  Streams
  • 3. Orígenes  El cálculo lambda fue desarrollado por Alonso Church en la década de los años 30 con el objeto de dar una teoría general de las funciones.  El cálculo lambda ha sido empleado como fundamento conceptual de los lenguajes de programación, aportando: – Una sintaxis básica – Una semántica para el concepto de función como proceso de transformación de argumentos en resultados  El cálculo lambda sirve como el modelo computacional de lenguajes que implementan la programación funcional, como Lisp, Haskell, Ocaml, etc.  Características del cálculo lambda como expresiones lambda se han incorporado en muchos lenguajes de programación ampliamente utilizados, ahora muy recientemente Java 8.
  • 4. Precedente  Clases anónimas – Una clase anónima siempre debe ser una subclase de otra clase existente o bien debe implementar alguna interfaz. – La definición de la clase anónima y la creación de una instancia de la misma representan acciones inseparables que se realizan en la misma línea de código.
  • 5. Precedente public static void main(String[] args) { List<String> lista; lista = Arrays.asList("Gustavo","Guino","Sergio","Cesar","Ernesto"); System.out.println(lista); Collections.sort(lista, new Comparator<String>() { @Override public int compare(String o1, String o2) { return o1.compareTo(o2); } }); System.out.println(lista); } run: [Gustavo, Guino, Sergio, Cesar, Ernesto] [Cesar, Ernesto, Guino, Gustavo, Sergio]
  • 6. Interfaces Funcionales  Son interfaces cuya característica es que tienen solo un método abstracto.  Normalmente, su implementación es como una clase anónima, definida en la misma línea de código donde se crea el objeto de la clase.  Son la base de las expresiones lambda.  Ejemplos: Comparator, Runnable, ActionListener, Callable.
  • 7. Interfaces Funcionales @FunctionalInterface public interface IMate { int opera(int n1, int n2); } public static void main(String[] args) { IMate o = new IMate() { @Override public int opera(int n1, int n2) { return (n1 + n2); } }; System.out.println("5 + 8 = " + o.opera(5, 8)); }
  • 8. Interfaces Funcionales public static void main(String[] args) { IMate sumar = (a,b) -> (a+b); IMate restar = (a,b) -> (a-b); System.out.println("5 + 8 = " + sumar.opera(5, 8)); System.out.println("8 - 5 = " + restar.opera(8, 5)); } run: 5 + 8 = 13 8 - 5 = 3
  • 9. Expresiones Lambda  Una expresión lambda se compone de tres partes: – Si es un solo argumento, no necesita los paréntesis. – Si es una sola sentencia, no necesita las llaves.
  • 10. Expresiones Lambda public static void main(String[] args) { List<String> lista = Arrays.asList("Gustavo", "Guino", "Sergio", "Cesar", "Ernesto"); System.out.println(lista); Collections.sort(lista, (o1, o2) -> o1.compareTo(o2)); System.out.println(lista); } run: [Gustavo, Guino, Sergio, Cesar, Ernesto] [Cesar, Ernesto, Guino, Gustavo, Sergio]
  • 11. Expresiones Lambda public class Prueba06 extends JFrame{ private JButton button; public Prueba06() throws HeadlessException { super("Demo Clásico"); setLayout(new GridLayout(1, 1)); setSize(200, 200); setLocationRelativeTo(null); button = new JButton("Saludar"); add(button); button.addActionListener( e -> JOptionPane.showMessageDialog(rootPane, "Hola Gustavo.")); } public static void main(String[] args) { Prueba06 bean = new Prueba06(); bean.setVisible(true); } } ActionListener
  • 12. Streams  Una secuencia de elementos que soportan operaciones secuenciales y paralelas. public static void main(String[] args) { List<Integer> lista = Arrays.asList(34, 76, 23, 78, 15, 80, 45, 67); lista.stream() .filter( n -> n > 50) .sorted() .forEach( n -> System.out.println(n)); } run: 67 76 78 80
  • 13. Streams  Soportan diferentes tipos de operaciones. public static void main(String[] args) { List<Integer> lista = Arrays.asList(34, 76, 23, 78, 15, 80, 45, 67); int suma = lista.stream() .filter( n -> n > 50) .mapToInt(n -> n.intValue()) .sum(); System.out.println("Suma: " + suma); } run: Suma: 301
  • 14. Streams  Soportan diferentes tipos de operaciones. public static void main(String[] args) { int suma = IntStream .of(34, 76, 23, 78, 15, 80, 45, 67) .filter( n -> n > 50) .sum(); System.out.println("Suma: " + suma); } run: Suma: 301
  • 15. Streams  Soportan diferentes tipos de operaciones. public static void main(String[] args) { Stream .of("Gustavo","Guino","Sergio","Cesar","Ernesto") .map(s -> s.toUpperCase()) .sorted() .forEach(System.out::println); } run: CESAR ERNESTO GUINO GUSTAVO SERGIO
  • 16. Eric Gustavo Coronel Castillo gcoronelc.blogspot.com Gracias