SlideShare a Scribd company logo
1 of 39
Java 8 LAMBDAS AND
METHOD REFERENCES
Behavior
parameterization
DON’T DISCRIMINATE METHODS, THEY ARE GOOD PEOPLE
Behavior parameterization
A little example
 Your client wants you to filter you big transactions from a transaction list.
Behavior parameterization
A little example
 Your client now wants to be able to filter small transations.
Behavior parameterization
Strategy pattern to the rescue
Behavior parameterization
Strategy pattern to the rescue
Behavior parameterization
Strategy pattern to the rescue
Behavior parameterization
Strategy pattern to the rescue
Behavior parameterization
Strategy pattern to the rescue
Behavior parameterization
The Java 8 way
Behavior parameterization
The Java 8 way
Behavior parameterization
The Java 8 way
Lambdas
ANONYMOUS FUNCTIONS FTW!
Lambdas
Lambdas
Functional interfaces
 An interface that specifies exactly one abstract method.
Lambdas
Functional interfaces
 An interface that specifies exactly one abstract method.
Lambdas
What is a lambda expression (in Java)?
 A concise definition an anonymous implementation of a functional interface.
 It’s composed by:
Parameters
Arrow
Body
Lambdas
Parameters
 They define de parameters used inside the expression’s body.
 Their types can be explicit or implicit (determined by the context).
 Examples:
Lambdas
Arrow
 It’s an arrow…
Lambdas
Body
 Defines the behavior of the function.
 Can be one expression or a block.
 For one expression the return value is implicit.
 For a block the return must be explicit.
Lambdas
Body
 Examples:
void
String
boolean
Lambdas
Lambdas
Return type
Return type Parameters
Parameters
Lambdas
Lambdas
Predicate
Lambdas
Consumer
Lambdas
Supplier
Lambdas
Runnable
Lambdas
Method references
 A more legible way of defining a lambda expression that calls one method.
 It’s composed by:
Target Method name
Double colon
Lambdas
Target
 Defines the context in which the method is to be executed.
 Examples:
Lambdas
Double colon
 Two colon characters.
Lambdas
Method name
 The name of the method to execute.
 Can be any method, including constructors.
 The referenced method can have any number of parameters.
Lambdas
Method name
 Examples:
Lambdas
Method references vs Lambdas
Lambdas
Method references vs Lambdas
Lambdas
Method references vs Lambdas
Lambdas
Method references vs Lambdas
Lambdas
Method references vs Lambdas
The end

More Related Content

Similar to Java 8 - Lambdas and method references

Similar to Java 8 - Lambdas and method references (20)

Functional programming in java 8 by harmeet singh
Functional programming in java 8 by harmeet singhFunctional programming in java 8 by harmeet singh
Functional programming in java 8 by harmeet singh
 
Raml
RamlRaml
Raml
 
Reflections the most important feature in java
Reflections   the most important feature in javaReflections   the most important feature in java
Reflections the most important feature in java
 
Lambda Expressions in Java | Java Lambda Tutorial | Java Certification Traini...
Lambda Expressions in Java | Java Lambda Tutorial | Java Certification Traini...Lambda Expressions in Java | Java Lambda Tutorial | Java Certification Traini...
Lambda Expressions in Java | Java Lambda Tutorial | Java Certification Traini...
 
Lambdas in Java 8
Lambdas in Java 8Lambdas in Java 8
Lambdas in Java 8
 
Java Training in Chennai | Advanced Java Training in chennai | J2EE Training ...
Java Training in Chennai | Advanced Java Training in chennai | J2EE Training ...Java Training in Chennai | Advanced Java Training in chennai | J2EE Training ...
Java Training in Chennai | Advanced Java Training in chennai | J2EE Training ...
 
Lambda.pdf
Lambda.pdfLambda.pdf
Lambda.pdf
 
Java 8 - An Overview
Java 8 - An OverviewJava 8 - An Overview
Java 8 - An Overview
 
Eclipse and Java 8 - Eclipse Day India 2013
Eclipse and Java 8 - Eclipse Day India 2013Eclipse and Java 8 - Eclipse Day India 2013
Eclipse and Java 8 - Eclipse Day India 2013
 
Introduction of Java 8 with emphasis on Lambda Expressions and Streams
Introduction of Java 8 with emphasis on Lambda Expressions and StreamsIntroduction of Java 8 with emphasis on Lambda Expressions and Streams
Introduction of Java 8 with emphasis on Lambda Expressions and Streams
 
Lambdas and-streams-s ritter-v3
Lambdas and-streams-s ritter-v3Lambdas and-streams-s ritter-v3
Lambdas and-streams-s ritter-v3
 
Java8 training - Class 1
Java8 training  - Class 1Java8 training  - Class 1
Java8 training - Class 1
 
Functional Programming in Java
Functional Programming in JavaFunctional Programming in Java
Functional Programming in Java
 
Lambdas
LambdasLambdas
Lambdas
 
Core java Training in Chennai
Core java Training in ChennaiCore java Training in Chennai
Core java Training in Chennai
 
Java moderno java para Jedis episodio I
Java moderno  java para  Jedis  episodio IJava moderno  java para  Jedis  episodio I
Java moderno java para Jedis episodio I
 
RAML
RAMLRAML
RAML
 
Accelerating Development.pptx
Accelerating Development.pptxAccelerating Development.pptx
Accelerating Development.pptx
 
Java 8 - Features Overview
Java 8 - Features OverviewJava 8 - Features Overview
Java 8 - Features Overview
 
Java 8 lambdas expressions
Java 8 lambdas expressionsJava 8 lambdas expressions
Java 8 lambdas expressions
 

Recently uploaded

%+27788225528 love spells in Atlanta Psychic Readings, Attraction spells,Brin...
%+27788225528 love spells in Atlanta Psychic Readings, Attraction spells,Brin...%+27788225528 love spells in Atlanta Psychic Readings, Attraction spells,Brin...
%+27788225528 love spells in Atlanta Psychic Readings, Attraction spells,Brin...
masabamasaba
 
CHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE
CHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICECHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE
CHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE
9953056974 Low Rate Call Girls In Saket, Delhi NCR
 
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
Health
 
Large-scale Logging Made Easy: Meetup at Deutsche Bank 2024
Large-scale Logging Made Easy: Meetup at Deutsche Bank 2024Large-scale Logging Made Easy: Meetup at Deutsche Bank 2024
Large-scale Logging Made Easy: Meetup at Deutsche Bank 2024
VictoriaMetrics
 
%+27788225528 love spells in Boston Psychic Readings, Attraction spells,Bring...
%+27788225528 love spells in Boston Psychic Readings, Attraction spells,Bring...%+27788225528 love spells in Boston Psychic Readings, Attraction spells,Bring...
%+27788225528 love spells in Boston Psychic Readings, Attraction spells,Bring...
masabamasaba
 
%+27788225528 love spells in Huntington Beach Psychic Readings, Attraction sp...
%+27788225528 love spells in Huntington Beach Psychic Readings, Attraction sp...%+27788225528 love spells in Huntington Beach Psychic Readings, Attraction sp...
%+27788225528 love spells in Huntington Beach Psychic Readings, Attraction sp...
masabamasaba
 
The title is not connected to what is inside
The title is not connected to what is insideThe title is not connected to what is inside
The title is not connected to what is inside
shinachiaurasa2
 

Recently uploaded (20)

Architecture decision records - How not to get lost in the past
Architecture decision records - How not to get lost in the pastArchitecture decision records - How not to get lost in the past
Architecture decision records - How not to get lost in the past
 
Announcing Codolex 2.0 from GDK Software
Announcing Codolex 2.0 from GDK SoftwareAnnouncing Codolex 2.0 from GDK Software
Announcing Codolex 2.0 from GDK Software
 
%+27788225528 love spells in Atlanta Psychic Readings, Attraction spells,Brin...
%+27788225528 love spells in Atlanta Psychic Readings, Attraction spells,Brin...%+27788225528 love spells in Atlanta Psychic Readings, Attraction spells,Brin...
%+27788225528 love spells in Atlanta Psychic Readings, Attraction spells,Brin...
 
CHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE
CHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICECHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE
CHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE
 
Direct Style Effect Systems - The Print[A] Example - A Comprehension Aid
Direct Style Effect Systems -The Print[A] Example- A Comprehension AidDirect Style Effect Systems -The Print[A] Example- A Comprehension Aid
Direct Style Effect Systems - The Print[A] Example - A Comprehension Aid
 
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
 
WSO2CON2024 - It's time to go Platformless
WSO2CON2024 - It's time to go PlatformlessWSO2CON2024 - It's time to go Platformless
WSO2CON2024 - It's time to go Platformless
 
%in Midrand+277-882-255-28 abortion pills for sale in midrand
%in Midrand+277-882-255-28 abortion pills for sale in midrand%in Midrand+277-882-255-28 abortion pills for sale in midrand
%in Midrand+277-882-255-28 abortion pills for sale in midrand
 
Large-scale Logging Made Easy: Meetup at Deutsche Bank 2024
Large-scale Logging Made Easy: Meetup at Deutsche Bank 2024Large-scale Logging Made Easy: Meetup at Deutsche Bank 2024
Large-scale Logging Made Easy: Meetup at Deutsche Bank 2024
 
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
 
tonesoftg
tonesoftgtonesoftg
tonesoftg
 
%+27788225528 love spells in Boston Psychic Readings, Attraction spells,Bring...
%+27788225528 love spells in Boston Psychic Readings, Attraction spells,Bring...%+27788225528 love spells in Boston Psychic Readings, Attraction spells,Bring...
%+27788225528 love spells in Boston Psychic Readings, Attraction spells,Bring...
 
WSO2Con2024 - From Code To Cloud: Fast Track Your Cloud Native Journey with C...
WSO2Con2024 - From Code To Cloud: Fast Track Your Cloud Native Journey with C...WSO2Con2024 - From Code To Cloud: Fast Track Your Cloud Native Journey with C...
WSO2Con2024 - From Code To Cloud: Fast Track Your Cloud Native Journey with C...
 
Right Money Management App For Your Financial Goals
Right Money Management App For Your Financial GoalsRight Money Management App For Your Financial Goals
Right Money Management App For Your Financial Goals
 
%in kempton park+277-882-255-28 abortion pills for sale in kempton park
%in kempton park+277-882-255-28 abortion pills for sale in kempton park %in kempton park+277-882-255-28 abortion pills for sale in kempton park
%in kempton park+277-882-255-28 abortion pills for sale in kempton park
 
%+27788225528 love spells in Huntington Beach Psychic Readings, Attraction sp...
%+27788225528 love spells in Huntington Beach Psychic Readings, Attraction sp...%+27788225528 love spells in Huntington Beach Psychic Readings, Attraction sp...
%+27788225528 love spells in Huntington Beach Psychic Readings, Attraction sp...
 
The title is not connected to what is inside
The title is not connected to what is insideThe title is not connected to what is inside
The title is not connected to what is inside
 
Software Quality Assurance Interview Questions
Software Quality Assurance Interview QuestionsSoftware Quality Assurance Interview Questions
Software Quality Assurance Interview Questions
 
MarTech Trend 2024 Book : Marketing Technology Trends (2024 Edition) How Data...
MarTech Trend 2024 Book : Marketing Technology Trends (2024 Edition) How Data...MarTech Trend 2024 Book : Marketing Technology Trends (2024 Edition) How Data...
MarTech Trend 2024 Book : Marketing Technology Trends (2024 Edition) How Data...
 
OpenChain - The Ramifications of ISO/IEC 5230 and ISO/IEC 18974 for Legal Pro...
OpenChain - The Ramifications of ISO/IEC 5230 and ISO/IEC 18974 for Legal Pro...OpenChain - The Ramifications of ISO/IEC 5230 and ISO/IEC 18974 for Legal Pro...
OpenChain - The Ramifications of ISO/IEC 5230 and ISO/IEC 18974 for Legal Pro...
 

Java 8 - Lambdas and method references

Editor's Notes

  1. Daros las gracias por asistir a este curso. Este es el primero de una serie de cursos sobre java 8. Streams y Lambdas son lo más conocido pero hay mucho más.
  2. En esta clase veremos dos temas muy relacionados: Parametrización de comportamiento y Lambdas. En Java 7 los métodos son ciudadanos de segunda categoría, junto con clases e interfaces.
  3. Para explicar este concepto y su necesidad, veremos primero que nada un ejemplo.
  4. Dentro de los patrones que nos sirven para parametrizar comportamiento, utilizaremos el Strategy. Tenemos la estrategia que representa un tipo de comportamiento. Luego están las estrategias concretas que definen el comportamiento. El contexto es quien ejecuta la estrategia o comportamiento. Vamos a definir cuál sería la estrategia (interfaz) en el caso del filtrado de transacciones
  5. Vamos a declarar una estrategia para determinar si una transacción debe o no pasar un filtro. ¿Por qué no he llamado a la interfaz TransactionStrategy? Podría ser, pero para este curso quiero que os quedéis con este nombre. Un predicado es una función matemática/lógica cuyo resultado es sí o no. Ya definidas las estrategias concretas, lo que debemos definir es el contexto, o sea, donde se ejecuta la estrategia.
  6. Vamos a definir un método que filtre transacciones en función de si el predicado es cierto o no para estas.
  7. Finalmente, tendremos los dos métodos anteriores de la siguiente forma. La solución es mucho más flexible pero aún así, implica la creación de una clase por tipo de filtro aplicado. Si el día de mañana el cliente nos pide filtrar por otro concepto, crearíamos una estrategia nueva y ya está. Si quisiéramos, podríamos incluso saltarnos la creación de las dos clases con las estrategias concretas y definirlas en el mismo método mediante clases internas.
  8. De esta forma nos ahorraríamos la creación de dos ficheros distintos, con todo lo que conlleva (imports, package, tests unitarios). Dicho esto vosotros diréis, ¿Y donde está Java 8 en todo esto? ¿Cómo haríamos esto con Java 8?
  9. Vamos a definir el comportamiento de las estrategias concretas en dos métodos, en vez de dos clases. Y a continuación es cuando los que llevamos un tiempo trabajando con Java y vemos esto…
  10. … cuando empezamos a vomitar arcoíris. Como veis, el método filterTransactions no lo hemos modificado. Sigue aceptando una lista de transacciones y un objeto de tipo TransactionPredicate. Pero en vez de una instancia, le hemos pasado una referencia a un método (parametrizado un comportamiento). Pero vamos más allá. ¿Qué pasaría si no nos interesara definir los métodos isBig y isSmall porque no son relevantes en otro contexto que el del filtrado de transacciones? Pasaría que los que llevamos un tiempo trabajando con Java, al ver esto…
  11. … además de vomitar arcoíris, vomitaríamos estrellitas. Esto que vemos aquí es una expresión lambda que define, de la misma forma que los métodos del ejemplo anterior, y que las estrategias concretas, un comportamiento. Este comportamiento sigue siendo el mismo. Hemos definido comportamientos de 3 formas distintas. Con objetos, con referencias a métodos y con expresiones lambdas. Como veis, Java 8 nos ha proveído de 2 maneras más. Probablemente muchos de vosotros estéis un poco perdidos en relación a lo que habéis visto. Tranquilos, en el próximo tema explicaremos un poco mejor qué es lo que ha sucedido.
  12. Le he llamado así porque las expresiones lambdas (y las referencias a métodos), no son otra cosa más que una definición de una función anónima (como una clase anónima interna).
  13. Al echar la mirada atrás, nos encontramos con que tanto la siguiente expresión lambda, y la referencia al método isBig, ambas se han utilizado como parámetros del método filterTransaction, en concreto el parámetro TransactionPredicate. ¿Qué relación puede haber? Para entender la relación de estos tres conceptos, detenemos que explicar uno nuevo (para Java).
  14. Una interfaz funcional no es más que una interfaz con un solo método abstracto. Unos ejemplos bastante conocidos de interfaces funcionales. Y hay otra interfaz que os sonará un poco. Creo que igual ya sabéis por donde voy.
  15. Una interfaz funcional no es más que una interfaz con un solo método abstracto. Unos ejemplos bastante conocidos de interfaces funcionales. Y hay otra interfaz que os sonará un poco. Creo que igual ya sabéis por donde voy.
  16. Dicho esto. ¿Qué es una expresión lambda? Es una forma concisa de definir una implementación anónima de una interfaz funcional. Ahora veremos cada parte por separado
  17. Bloque: A diferencia del método, en el que el tipo del dato de salida está en la especificación del mismo, aquí es el bloque el que lo especifica y debe ser consistente.
  18. Ya sabiendo todo esto, podemos decir…
  19. Que como una expresión lambda no es más que una forma de especificar una instancia de una clase anónima que implementa una interfaz funcional, como es Comparator, estos dos trozos de código hacen lo mismo.
  20. Volviendo al ejemplo del principio. ¿Por qué ha compilado el código? ¿Qué relación hay entre la expresión lambda y la interfaz? Una expresión lambda se puede usar como una instancia de una interfaz funcional cuando sus parámetros y su tipo de retorno coinciden con el de su único método abstracto de esa interfaz funcional. En ambos casos hay un parámetro de entrada, cuyo tipo es inferido en la expresión lambda por el contexto. A su vez vemos que el tipo devuelto por ambos, expresión y método, es booleano. Esto hace que la expresión lambda pueda ser usada como TransactionPredicate.
  21. Un ejemplo un poco más complejo. Tenemos esta interfaz funcional Function que está definida con generics. ¿Qué significa? Que esta misma interfaz nos servirá para definir una infinidad de tipos de funciones de un parámetro de entrada y que devuelvan un tipo distinto a void. Por ejemplo. ¿Y la anotación @FunctionalInterface? Le indica al compilador que es una interfaz funcional, y por lo tanto no puede tener más de un método. Por último, Java provee una serie de interfaces funcionales, como Function, que nos servirán en la mayoría de casos. A continuación le echaremos un vistazo a las más relevantes.
  22. Representa un predicado funcional, lo que es lo mismo, una función que para un parámetro de entrada devuelve verdadero o falso. Este sería un ejemplo para una cadena de caracteres. Y vosotros diréis “Esto me suena de algo”. Hemos creado TransactionPredicate que es básicamente lo mismo.
  23. El siguiente es un Consumer, que como dice su nombre, consume. ¿Qué quiere decir? Que acepta/consume un parámetro de entrada pero no deuelve nada.
  24. La siguiente interfaz es Supplier/Proveedor. Su misión es proveer de objetos.
  25. La última interfaz es Runnable. No es parte del paquete java.útil.function pero en Java8 ha obtenido la anotación FunctionalInterface. Si tuviéramos un método privado llamado sendEmail(), podríamos crear una instancia de Runnable de la siguiente manera. Ya que tenemos el método privado, también podríamos crear un Runnable así. Esta es una referencia a un método. En concreto, al método sendEmail, ejecutado en el contexto de esta instancia (this)
  26. Al usar referencias directas a métodos, además de ganar legibilidad, reducimos la “verbosidad”. Se compone por el destino, un doble doble punto, y el nombre del método.
  27. El target o blanco o destino define el contexto en el que se ejecutará el método, o dicho de otra forma, quién ejecutará el método.
  28. El target o blanco o destino define el contexto en el que se ejecutará el método, o dicho de otra forma, quién ejecutará el método.
  29. Como vemos, hay dos formas de referenciar al mismo método. ¿Cuál es la diferencia?
  30. A continuación, y ya para terminar la clase, haremos una comparación entre referencias a métodos y sus equivalentes expresiones lambdas para tener los conceptos más claros.