SlideShare ist ein Scribd-Unternehmen logo
1 von 16
Downloaden Sie, um offline zu lesen
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

Weitere ähnliche Inhalte

Was ist angesagt?

Estructura de Datos Unidad - V: Métodos de Ordenamiento
Estructura de Datos Unidad - V: Métodos de OrdenamientoEstructura de Datos Unidad - V: Métodos de Ordenamiento
Estructura de Datos Unidad - V: Métodos de OrdenamientoJosé Antonio Sandoval Acosta
 
Lenguajes autómatas.
Lenguajes autómatas.Lenguajes autómatas.
Lenguajes autómatas.LuiS YmAY
 
Unidad 3 TÉCNICAS PARA EL ANALISIS DE REQUERIMIENTO
Unidad 3 TÉCNICAS PARA EL ANALISIS DE REQUERIMIENTOUnidad 3 TÉCNICAS PARA EL ANALISIS DE REQUERIMIENTO
Unidad 3 TÉCNICAS PARA EL ANALISIS DE REQUERIMIENTOGuillermo Hernandez Miranda
 
automatas finitos
 automatas finitos automatas finitos
automatas finitosAnel Sosa
 
Los 13 diagramas UML y sus componentes
Los 13 diagramas UML y sus componentesLos 13 diagramas UML y sus componentes
Los 13 diagramas UML y sus componentesVictor Escamilla
 
Gramática Libre de Contexto
Gramática Libre de ContextoGramática Libre de Contexto
Gramática Libre de ContextoBrayhan Acosta
 
Tema 10: Evaluación perezosa en Haskell
Tema 10: Evaluación perezosa en HaskellTema 10: Evaluación perezosa en Haskell
Tema 10: Evaluación perezosa en HaskellJosé A. Alonso
 
Interprete sencillo utilizando ply con python 3
Interprete sencillo utilizando ply con python 3Interprete sencillo utilizando ply con python 3
Interprete sencillo utilizando ply con python 3MAURICIOANDRES39
 
Metodologías Para AnáLisis Y DiseñO Orientado A Objetos
Metodologías Para AnáLisis Y DiseñO Orientado A ObjetosMetodologías Para AnáLisis Y DiseñO Orientado A Objetos
Metodologías Para AnáLisis Y DiseñO Orientado A Objetoshector_h30
 
Tipos de ciclos de vida
Tipos de ciclos de vidaTipos de ciclos de vida
Tipos de ciclos de vidasandrasig
 
Tipos de Autómatas 
Tipos de Autómatas Tipos de Autómatas 
Tipos de Autómatas yelizabeth_20
 
Aplicaciones de Autómatas y Lenguajes Formales
Aplicaciones de Autómatas y Lenguajes FormalesAplicaciones de Autómatas y Lenguajes Formales
Aplicaciones de Autómatas y Lenguajes FormalesMoises Benzan
 
ANALIZADOR SINTACTICO: INTRODUCION, CONCEPTOS, CARACTERISTICAS
ANALIZADOR SINTACTICO: INTRODUCION, CONCEPTOS, CARACTERISTICAS ANALIZADOR SINTACTICO: INTRODUCION, CONCEPTOS, CARACTERISTICAS
ANALIZADOR SINTACTICO: INTRODUCION, CONCEPTOS, CARACTERISTICAS Infomania pro
 

Was ist angesagt? (20)

Estructura de Datos Unidad - V: Métodos de Ordenamiento
Estructura de Datos Unidad - V: Métodos de OrdenamientoEstructura de Datos Unidad - V: Métodos de Ordenamiento
Estructura de Datos Unidad - V: Métodos de Ordenamiento
 
Lenguajes autómatas.
Lenguajes autómatas.Lenguajes autómatas.
Lenguajes autómatas.
 
Diagrama de componentes
Diagrama de componentesDiagrama de componentes
Diagrama de componentes
 
Recuperación de-datos-en-my sql
Recuperación de-datos-en-my sqlRecuperación de-datos-en-my sql
Recuperación de-datos-en-my sql
 
Unidad 3 TÉCNICAS PARA EL ANALISIS DE REQUERIMIENTO
Unidad 3 TÉCNICAS PARA EL ANALISIS DE REQUERIMIENTOUnidad 3 TÉCNICAS PARA EL ANALISIS DE REQUERIMIENTO
Unidad 3 TÉCNICAS PARA EL ANALISIS DE REQUERIMIENTO
 
automatas finitos
 automatas finitos automatas finitos
automatas finitos
 
Los 13 diagramas UML y sus componentes
Los 13 diagramas UML y sus componentesLos 13 diagramas UML y sus componentes
Los 13 diagramas UML y sus componentes
 
Cuestionario uml
Cuestionario umlCuestionario uml
Cuestionario uml
 
Gramática Libre de Contexto
Gramática Libre de ContextoGramática Libre de Contexto
Gramática Libre de Contexto
 
Analizador Léxico en C++
Analizador Léxico en C++Analizador Léxico en C++
Analizador Léxico en C++
 
Ciclo Vida del Software
Ciclo Vida del SoftwareCiclo Vida del Software
Ciclo Vida del Software
 
Tema 10: Evaluación perezosa en Haskell
Tema 10: Evaluación perezosa en HaskellTema 10: Evaluación perezosa en Haskell
Tema 10: Evaluación perezosa en Haskell
 
Interprete sencillo utilizando ply con python 3
Interprete sencillo utilizando ply con python 3Interprete sencillo utilizando ply con python 3
Interprete sencillo utilizando ply con python 3
 
Metodologías Para AnáLisis Y DiseñO Orientado A Objetos
Metodologías Para AnáLisis Y DiseñO Orientado A ObjetosMetodologías Para AnáLisis Y DiseñO Orientado A Objetos
Metodologías Para AnáLisis Y DiseñO Orientado A Objetos
 
Tipos de ciclos de vida
Tipos de ciclos de vidaTipos de ciclos de vida
Tipos de ciclos de vida
 
Tipos de Autómatas 
Tipos de Autómatas Tipos de Autómatas 
Tipos de Autómatas 
 
Pruebas de caja blanca y negra
Pruebas  de caja blanca y negraPruebas  de caja blanca y negra
Pruebas de caja blanca y negra
 
Prueba software orientado a objetos
Prueba software orientado a objetosPrueba software orientado a objetos
Prueba software orientado a objetos
 
Aplicaciones de Autómatas y Lenguajes Formales
Aplicaciones de Autómatas y Lenguajes FormalesAplicaciones de Autómatas y Lenguajes Formales
Aplicaciones de Autómatas y Lenguajes Formales
 
ANALIZADOR SINTACTICO: INTRODUCION, CONCEPTOS, CARACTERISTICAS
ANALIZADOR SINTACTICO: INTRODUCION, CONCEPTOS, CARACTERISTICAS ANALIZADOR SINTACTICO: INTRODUCION, CONCEPTOS, CARACTERISTICAS
ANALIZADOR SINTACTICO: INTRODUCION, CONCEPTOS, CARACTERISTICAS
 

Andere mochten auch (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
 

Ähnlich wie 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
 

Ähnlich wie 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
 

Mehr von 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
 

Mehr von 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
 

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