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

Componentes y Librerías - Tópicos avanzados de programación.
Componentes y Librerías - Tópicos avanzados de programación.Componentes y Librerías - Tópicos avanzados de programación.
Componentes y Librerías - Tópicos avanzados de programación.Giancarlo Aguilar
 
Diagramas de Clases, Secuencia, Patrones de Diseño MVC, Disño de Interfaces d...
Diagramas de Clases, Secuencia, Patrones de Diseño MVC, Disño de Interfaces d...Diagramas de Clases, Secuencia, Patrones de Diseño MVC, Disño de Interfaces d...
Diagramas de Clases, Secuencia, Patrones de Diseño MVC, Disño de Interfaces d...Oswaldo Hernández
 
Metodos de-ordenamiento
Metodos de-ordenamientoMetodos de-ordenamiento
Metodos de-ordenamientodeff000001
 
Importancia de la implementación de las listas para la estructura de datos
Importancia de la implementación de las listas para la estructura de datosImportancia de la implementación de las listas para la estructura de datos
Importancia de la implementación de las listas para la estructura de datospepelebu1313
 
Estructura de Datos: Lista
Estructura de Datos: ListaEstructura de Datos: Lista
Estructura de Datos: ListaEmerson Garay
 
Uml lenguaje unificado de modelado
Uml lenguaje unificado de modeladoUml lenguaje unificado de modelado
Uml lenguaje unificado de modeladoMarvin Zumbado
 
Prolog ejercicios resueltos
Prolog ejercicios resueltosProlog ejercicios resueltos
Prolog ejercicios resueltosJansel M
 
Funciones y procedimientos propios de LPP
Funciones y procedimientos propios de LPPFunciones y procedimientos propios de LPP
Funciones y procedimientos propios de LPPurumisama
 
automatas finitos
 automatas finitos automatas finitos
automatas finitosAnel Sosa
 
Diagramas de estados
Diagramas de estadosDiagramas de estados
Diagramas de estadosstill01
 
Ejemplo de RPC (Servidor de Archivos) enviar archivo en Java utilizando RPC
Ejemplo de RPC (Servidor de Archivos) enviar archivo en Java utilizando RPCEjemplo de RPC (Servidor de Archivos) enviar archivo en Java utilizando RPC
Ejemplo de RPC (Servidor de Archivos) enviar archivo en Java utilizando RPCIvan Luis Jimenez
 
Operaciones entre lenguajes
Operaciones entre lenguajesOperaciones entre lenguajes
Operaciones entre lenguajesJean Bernard
 

Tendances (20)

Componentes y Librerías - Tópicos avanzados de programación.
Componentes y Librerías - Tópicos avanzados de programación.Componentes y Librerías - Tópicos avanzados de programación.
Componentes y Librerías - Tópicos avanzados de programación.
 
Diagramas de Clases, Secuencia, Patrones de Diseño MVC, Disño de Interfaces d...
Diagramas de Clases, Secuencia, Patrones de Diseño MVC, Disño de Interfaces d...Diagramas de Clases, Secuencia, Patrones de Diseño MVC, Disño de Interfaces d...
Diagramas de Clases, Secuencia, Patrones de Diseño MVC, Disño de Interfaces d...
 
Metodos de-ordenamiento
Metodos de-ordenamientoMetodos de-ordenamiento
Metodos de-ordenamiento
 
Importancia de la implementación de las listas para la estructura de datos
Importancia de la implementación de las listas para la estructura de datosImportancia de la implementación de las listas para la estructura de datos
Importancia de la implementación de las listas para la estructura de datos
 
Árboles binarios, ABB y AVL
Árboles binarios, ABB y AVLÁrboles binarios, ABB y AVL
Árboles binarios, ABB y AVL
 
LibreríAs De Java
LibreríAs De JavaLibreríAs De Java
LibreríAs De Java
 
Metodologia orientada a objeto
Metodologia orientada a objetoMetodologia orientada a objeto
Metodologia orientada a objeto
 
Estructura de Datos: Lista
Estructura de Datos: ListaEstructura de Datos: Lista
Estructura de Datos: Lista
 
Uml lenguaje unificado de modelado
Uml lenguaje unificado de modeladoUml lenguaje unificado de modelado
Uml lenguaje unificado de modelado
 
Jerarquia de chomsky
Jerarquia de chomskyJerarquia de chomsky
Jerarquia de chomsky
 
Prolog ejercicios resueltos
Prolog ejercicios resueltosProlog ejercicios resueltos
Prolog ejercicios resueltos
 
3.4. Logica de predicados
3.4. Logica de predicados3.4. Logica de predicados
3.4. Logica de predicados
 
Funciones y procedimientos propios de LPP
Funciones y procedimientos propios de LPPFunciones y procedimientos propios de LPP
Funciones y procedimientos propios de LPP
 
Estructura secuencial
Estructura secuencialEstructura secuencial
Estructura secuencial
 
Metodología CommonKADS
Metodología CommonKADSMetodología CommonKADS
Metodología CommonKADS
 
Logica
LogicaLogica
Logica
 
automatas finitos
 automatas finitos automatas finitos
automatas finitos
 
Diagramas de estados
Diagramas de estadosDiagramas de estados
Diagramas de estados
 
Ejemplo de RPC (Servidor de Archivos) enviar archivo en Java utilizando RPC
Ejemplo de RPC (Servidor de Archivos) enviar archivo en Java utilizando RPCEjemplo de RPC (Servidor de Archivos) enviar archivo en Java utilizando RPC
Ejemplo de RPC (Servidor de Archivos) enviar archivo en Java utilizando RPC
 
Operaciones entre lenguajes
Operaciones entre lenguajesOperaciones entre lenguajes
Operaciones entre lenguajes
 

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

MacOS SISTEMA OPERATIVO CARACTERISTICAS.pptx
MacOS SISTEMA OPERATIVO CARACTERISTICAS.pptxMacOS SISTEMA OPERATIVO CARACTERISTICAS.pptx
MacOS SISTEMA OPERATIVO CARACTERISTICAS.pptxcalzadillasluis134
 
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
 
Introducción a Plone CMS - World Plone Day 2024
Introducción a Plone CMS - World Plone Day 2024Introducción a Plone CMS - World Plone Day 2024
Introducción a Plone CMS - World Plone Day 2024Leonardo J. Caballero G.
 
Semana 5-Conceptualización del lenguaje de programación C++
Semana 5-Conceptualización del lenguaje de programación C++Semana 5-Conceptualización del lenguaje de programación C++
Semana 5-Conceptualización del lenguaje de programación C++luzgaray6
 
Presentación de html, css y javascript.
Presentación  de html, css y javascript.Presentación  de html, css y javascript.
Presentación de html, css y javascript.CeteliInmaculada
 

Dernier (6)

MacOS SISTEMA OPERATIVO CARACTERISTICAS.pptx
MacOS SISTEMA OPERATIVO CARACTERISTICAS.pptxMacOS SISTEMA OPERATIVO CARACTERISTICAS.pptx
MacOS SISTEMA OPERATIVO CARACTERISTICAS.pptx
 
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
 
Introducción a Plone CMS - World Plone Day 2024
Introducción a Plone CMS - World Plone Day 2024Introducción a Plone CMS - World Plone Day 2024
Introducción a Plone CMS - World Plone Day 2024
 
Semana 5-Conceptualización del lenguaje de programación C++
Semana 5-Conceptualización del lenguaje de programación C++Semana 5-Conceptualización del lenguaje de programación C++
Semana 5-Conceptualización del lenguaje de programación C++
 
Presentación de html, css y javascript.
Presentación  de html, css y javascript.Presentación  de html, css y javascript.
Presentación de html, css y javascript.
 

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