SlideShare une entreprise Scribd logo
Java 8
Les lambdas
antislashn.org Java 8 - les lambdas 2 / 20
Introduction
● Une expression lambda permet d'implémenter une
nouvelle opération sans avoir à créer une nouvelle
classe
● le type des arguments et de la valeur de retour doivent
correspondre à ceux de la méthode de l'interface
fonctionnelle
r = Calcul.compute(10, 2, (x,y) -> x*y);
antislashn.org Java 8 - les lambdas 3 / 20
Introduction
● Fonction lambda ou fonction anonyme
● fonction n'ayant pas de nom
● les instructions de la fonction lambda suivent une syntaxe
particulière
● il est possible de
– la stocker lambda dans une variable de type interface
fonctionnelle
– la retourner depuis une méthode, ou une autre fonction
● JSR 335
antislashn.org Java 8 - les lambdas 4 / 20
Introduction
● Expression lambda
● une expression lambda est une notation abrégée d'une
méthode fonctionnelle
● une fonction lambda peut renvoyer une valeur
– si lambda à une seule expression, la valeur renvoyée est
l'expression elle-même
– si lambda à un bloc de code, la valeur renvoyée est fournie par
un ou plusieurs return
String[] tabString = {"a","b","c","d","e","f"};
Arrays.asList(tabString).forEach(s -> System.out.println(s));
antislashn.org Java 8 - les lambdas 5 / 20
Syntaxe
● Syntaxe de base
● nouvel opérateur, l'opérateur flèche: ->
– tiret suivi du signe >
● les arguments doivent être entre ( )
– si pas d'argument, parenthèses vides
– si un seul argument, les parenthèses peuvent être omises
– le type des arguments peut être indiqué
● le corps
– est une simple expression, la valeur de cette expression est
alors renvoyée
– un bloc d'instructions, entre { }, peut contenir un ou plusieurs
return
arguments -> corps
antislashn.org Java 8 - les lambdas 6 / 20
Portée des variables
● Une expression lambda se comporte comme un bloc
de code { }
● comme les classes anonymes, la lambda peut avoir accès
à certaines variables définies dans le contexte engobant
● Il est possible d'utiliser dans le corps de la lambda
● des paramètres passés à l'expression
● des variables définies dans le corps de la lambda
● des variables final du corps englobant
● des variables effectivement final
– depuis Java 8 : variables non déclarées final mais qui ne sont
jamais modifiées
antislashn.org Java 8 - les lambdas 7 / 20
Syntaxe
● Les paramètres
● une lambda peut avoir aucun, un ou plusieurs paramètres
● le type des paramètres peut-être précisé, ou inféré par le
compilateur
– pas possible de mixer typage et inférence
● les paramètres sont entourés par des parenthèses et
séparés par des virgules
– aucun paramètre : parenthèses vides
– un paramètre : parenthèses facultatives
● les types doivent correspondre à ceux de l'interface
fonctionnelle
antislashn.org Java 8 - les lambdas 8 / 20
Exemple
● Quelques exemples
● sortis de leur contexte, ce qui explique l'absence de ;
() -> System.out.println("hi")
(x,y) -> x+y
(Point p, int x) -> p.add(x)
Arrays.asList(tabString).sort((e1,e2)->e1.compareTo(e2));
(x,y) -> {if(x<y)
return y;
else
return x;}
Operation op = (x,y) -> x % y;
antislashn.org Java 8 - les lambdas 9 / 20
Utilisation
● Une expression lambda est passée en tant que
paramètre à une méthode
● alternative à l'implémentation d'une interface
● elle définit une implémentation pour une interface
fonctionnelle
● l'interface fonctionnelle est typée de manière statique
– inférence de type par le compilateur
antislashn.org Java 8 - les lambdas 10 / 20
Utilisation
● Une lambda ne peut être utilisée que si le
compilateur peut en identifier l'utilisation cible
● appelée "target type"
● interface fonctionnelle
● La lambda est transformée par le compilateur en une
instance de l'interface fonctionnelle
antislashn.org Java 8 - les lambdas 11 / 20
Utilisation
● Exemple d'implémentation d'un Thread
● classe anonyme
● lambda
Thread th = new Thread(new Runnable() {
@Override
public void run() {
System.out.println("Traitement à effectuer dans le thread");
}
});
th.start();
Thread th = new Thread(()-> System.out.println("Traitement à effectuer dans le thread") );
th.start();
antislashn.org Java 8 - les lambdas 12 / 20
Références de méthode
● Raccourci syntaxique pour créer un expression
lambda qui invoque une méthode ou un constructeur
● lambda : méthode anonyme dont le type est une interface
fonctionnelle
● référence à une méthode : invoque un constructeur ou
une méthode statique
● Nouvel opérateur ::
antislashn.org Java 8 - les lambdas 13 / 20
Références de méthodes
● Quatre types de références de méthodes
● référence à une méthode statique
– class::staticMethod
● référence à une méthode d'instance
– oject::method
● référence à un construteur
– class::new
● référence une méthode d'un type donné
– class::method
antislashn.org Java 8 - les lambdas 14 / 20
Référence de méthode
● Appelé une méthode d'instance
● préciser l'instance dans la référence à la méthode
● préciser le type dans la référence à la méthode
– alors il faut fournir l'instance en paramètre
antislashn.org Java 8 - les lambdas 15 / 20
Références de méthodes
● Exemple
● le corps de l'expression lambda ne fait qu'invoquer une
méthode : remplacement par une référence à une
méthode
JButton button = new JButton();
button.addActionListener(event -> System.out.println(event));
JButton button = new JButton();
button.addActionListener(System.out::println);
antislashn.org Java 8 - les lambdas 16 / 20
Références de méthodes
● Exemple de référence à une méthode statique
public class MainStaticReference {
public static void main(String[] args) {
// expression lambda
new Thread(() -> compute()).start();
// référence à une méthode statique
new Thread(MainStaticReference::compute).start();
}
// méthode statique
static void compute() {
System.out.println("traitement par le thread : " + Thread.currentThread().getName());
}
}
antislashn.org Java 8 - les lambdas 17 / 20
Références de méthodes
● Exemple de référence à une méthode d'instance
public class ContactComparator {
public int comparerByNom(Contact c1, Contact c2) {
return c1.getNom().compareTo(c2.getPrenom());
}
}
Contact[] contacts = {
new Contact("Mme","Sasseur","Marlène"),
new Contact("M","Naudin","Fernand"),
new Contact("M","Michalon","Léonard")
};
ContactComparator comparator = new ContactComparator();
Arrays.sort(contacts, comparator::comparerByNom);
System.out.println(Arrays.deepToString(contacts));
antislashn.org Java 8 - les lambdas 18 / 20
Références de méthodes
● Exemple de référence de méthode d'une instance
arbitraire
String[] jours = {"lundi","mardi","mercredi","jeudi","vendredi","samedi","dimanche"};
// expression Lambda
Arrays.sort(jours, (j1,j2) -> j1.compareToIgnoreCase(j2));
// référence vers méthode d'un type unbound
Arrays.sort(jours, String::compareToIgnoreCase);
antislashn.org Java 8 - les lambdas 19 / 20
Références
● Référence à un constructeur
● le compilateur va déterminé quelle est la signature du
constructeur en fonction du contexte
public interface ContactSupplier {
Contact create(String civilite, String nom, String prenom);
}
ContactSupplier supplier = Contact::new;
Contact contact = supplier.create("M", "Perrin", "François");
antislashn.org Java 8 - les lambdas 20 / 20
Références
● https://www.oracle.com/webfolder/technetwork/tutorials/obe/java/Lambda-QuickStart/index.html
● https://docs.oracle.com/javase/tutorial/java/javaOO/lambdaexpressions.html
● https://blog.zenika.com/2012/05/30/java-8-et-les-lambda/
● https://www.jmdoudoux.fr/java/dej/chap-lambdas.htm#lambdas-3

Contenu connexe

PDF
Java 8 - interfaces
PDF
Java 8 - collections et stream
PDF
Chapitre 11: Expression Lambda et Référence de méthode en Java
PPTX
Chapitre1: Langage Python
PDF
Chapitre6: Surcharge des opérateurs
PDF
Chap 6 : classes et interfaces
PPT
Les fondamentaux du langage C
PPTX
Initiation à l'algorithmique
Java 8 - interfaces
Java 8 - collections et stream
Chapitre 11: Expression Lambda et Référence de méthode en Java
Chapitre1: Langage Python
Chapitre6: Surcharge des opérateurs
Chap 6 : classes et interfaces
Les fondamentaux du langage C
Initiation à l'algorithmique

Tendances (20)

PPTX
Initiation à l'algorithmique
PDF
Chapitre2fonctionscppv2019
PDF
Chap1: Cours en C++
PDF
Interface fonctionnelle, Lambda expression, méthode par défaut, référence de...
PPTX
Introduction au java
PDF
Chapitre 2: String en Java
PDF
Chapitre5: Classes et objets
PDF
Chap2fonctionscpp
PPTX
PPTX
Introduction a Java
PDF
Cours java script
DOCX
Améliorations dans Java depuis la version 5
PDF
La programmation modulaire en Python
PDF
Exceptions
PPTX
Csharp1 : quelques elements de base
PPTX
cpp1 : Quelques elements de base du C++
PDF
Chap1V2019: Cours en C++
PPTX
Cpp2 : classes et objets
PPTX
Introduction à Python
Initiation à l'algorithmique
Chapitre2fonctionscppv2019
Chap1: Cours en C++
Interface fonctionnelle, Lambda expression, méthode par défaut, référence de...
Introduction au java
Chapitre 2: String en Java
Chapitre5: Classes et objets
Chap2fonctionscpp
Introduction a Java
Cours java script
Améliorations dans Java depuis la version 5
La programmation modulaire en Python
Exceptions
Csharp1 : quelques elements de base
cpp1 : Quelques elements de base du C++
Chap1V2019: Cours en C++
Cpp2 : classes et objets
Introduction à Python
Publicité

Similaire à Java 8 - lambda (12)

PPTX
expression lambda
PDF
Java 8 : Un ch'ti peu de lambda
PDF
20140123 java8 lambdas_jose-paumard-soat
PPTX
memento_java_3c.pptx
PDF
Les nouveautés de Java 22 - Oracle Dev Day mai 2024.pdf
PDF
classes-anonymes.pdf
PDF
JDK 8, lambdas, streams, collectors - Bretagne Tour
PDF
Les nouveautés de Java 22 - Lorraine JUG avril 2024.pdf
PDF
201305 - Lambda by R. Forax
PPT
XB-Java.ppt
PDF
Du JDK 21 au JDK 25 - Java Days Paris - 5 juin 2025
PDF
Techday Arrow Group: Java 8
expression lambda
Java 8 : Un ch'ti peu de lambda
20140123 java8 lambdas_jose-paumard-soat
memento_java_3c.pptx
Les nouveautés de Java 22 - Oracle Dev Day mai 2024.pdf
classes-anonymes.pdf
JDK 8, lambdas, streams, collectors - Bretagne Tour
Les nouveautés de Java 22 - Lorraine JUG avril 2024.pdf
201305 - Lambda by R. Forax
XB-Java.ppt
Du JDK 21 au JDK 25 - Java Days Paris - 5 juin 2025
Techday Arrow Group: Java 8
Publicité

Plus de Franck SIMON (16)

PDF
Distribuer une librairie via maven
PDF
Java 9 modules
PDF
Java 8 - DateTime
PDF
Gwt jetty et sources de données
PDF
Description d'un fichier de prélèvements SEPA minimum
PDF
Tomcat and apache httpd training
PDF
Android ORMLite
PDF
JBoss - chapitre JMX
PDF
Java - programmation concurrente
PDF
Android Input Method Editor
PDF
PDF
Architectures distribuées
PDF
Android NDK
PDF
Développement Android
PDF
jQuery
PDF
Java scripting api
Distribuer une librairie via maven
Java 9 modules
Java 8 - DateTime
Gwt jetty et sources de données
Description d'un fichier de prélèvements SEPA minimum
Tomcat and apache httpd training
Android ORMLite
JBoss - chapitre JMX
Java - programmation concurrente
Android Input Method Editor
Architectures distribuées
Android NDK
Développement Android
jQuery
Java scripting api

Dernier (20)

PDF
Articles definis et indefinis. Comment les différencier ?
PPTX
Hopital bonne sante.pptxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
PPTX
le-present-de-lindicatif-ou-le-subjonctif-present-exercice-grammatical-feuill...
PPTX
risque environnema et mesure protect.pptx
PDF
Consignes générales sécurité et environnement.pdf
PPTX
GESTION PHYTO_10-1_ SESAME PRPS BF JUIN 2020.pptx
PDF
🎓 Le Secret des Profs Captivants - 💡 2. Hygiène vocale et santé professionnel...
PPTX
SESSION1-SUPPORT-DE-COURS-FLEC-(Future leader en énergie au Cameroun)-CECOSDA...
DOCX
ENDODONTIE CONSERVATRICE.docx faculté de médecine dentaire
PPTX
Bienvenido slides about the first steps in spanish.pptx
PPTX
Présentation Personal Branding J2025.pptx_20250218_132749_0000.pptx_20250610_...
PPTX
Devenir Inspecteur HSE _ Chp1_ L1....pptx
PPT
le-subjonctif-présent, Grammaire, français
PPTX
SESSION3-SUPPORT-DE-COURS-FLEC-(Future leader en énergie au Cameroun)-CECOSDA...
PPT
Les moyens de transport-2023.ppt french language teaching ppt
PPTX
SESSION1-SUPPORT-DE-COURS-FLEC-(Future leader en énergie au Cameroun)-CECOSDA...
PPTX
Le rendez-vous de l'été.pptx Film français
PPTX
Copie de Présentation Personal Branding J2025.pptx_20250610_120558_0000.pptx
PPTX
Presentation_carte_arduino_uno_1_Entree_Sortie_numerique.pptx
PPT
calcul---électrique--et--chutes de tension.ppt
Articles definis et indefinis. Comment les différencier ?
Hopital bonne sante.pptxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
le-present-de-lindicatif-ou-le-subjonctif-present-exercice-grammatical-feuill...
risque environnema et mesure protect.pptx
Consignes générales sécurité et environnement.pdf
GESTION PHYTO_10-1_ SESAME PRPS BF JUIN 2020.pptx
🎓 Le Secret des Profs Captivants - 💡 2. Hygiène vocale et santé professionnel...
SESSION1-SUPPORT-DE-COURS-FLEC-(Future leader en énergie au Cameroun)-CECOSDA...
ENDODONTIE CONSERVATRICE.docx faculté de médecine dentaire
Bienvenido slides about the first steps in spanish.pptx
Présentation Personal Branding J2025.pptx_20250218_132749_0000.pptx_20250610_...
Devenir Inspecteur HSE _ Chp1_ L1....pptx
le-subjonctif-présent, Grammaire, français
SESSION3-SUPPORT-DE-COURS-FLEC-(Future leader en énergie au Cameroun)-CECOSDA...
Les moyens de transport-2023.ppt french language teaching ppt
SESSION1-SUPPORT-DE-COURS-FLEC-(Future leader en énergie au Cameroun)-CECOSDA...
Le rendez-vous de l'été.pptx Film français
Copie de Présentation Personal Branding J2025.pptx_20250610_120558_0000.pptx
Presentation_carte_arduino_uno_1_Entree_Sortie_numerique.pptx
calcul---électrique--et--chutes de tension.ppt

Java 8 - lambda

  • 2. antislashn.org Java 8 - les lambdas 2 / 20 Introduction ● Une expression lambda permet d'implémenter une nouvelle opération sans avoir à créer une nouvelle classe ● le type des arguments et de la valeur de retour doivent correspondre à ceux de la méthode de l'interface fonctionnelle r = Calcul.compute(10, 2, (x,y) -> x*y);
  • 3. antislashn.org Java 8 - les lambdas 3 / 20 Introduction ● Fonction lambda ou fonction anonyme ● fonction n'ayant pas de nom ● les instructions de la fonction lambda suivent une syntaxe particulière ● il est possible de – la stocker lambda dans une variable de type interface fonctionnelle – la retourner depuis une méthode, ou une autre fonction ● JSR 335
  • 4. antislashn.org Java 8 - les lambdas 4 / 20 Introduction ● Expression lambda ● une expression lambda est une notation abrégée d'une méthode fonctionnelle ● une fonction lambda peut renvoyer une valeur – si lambda à une seule expression, la valeur renvoyée est l'expression elle-même – si lambda à un bloc de code, la valeur renvoyée est fournie par un ou plusieurs return String[] tabString = {"a","b","c","d","e","f"}; Arrays.asList(tabString).forEach(s -> System.out.println(s));
  • 5. antislashn.org Java 8 - les lambdas 5 / 20 Syntaxe ● Syntaxe de base ● nouvel opérateur, l'opérateur flèche: -> – tiret suivi du signe > ● les arguments doivent être entre ( ) – si pas d'argument, parenthèses vides – si un seul argument, les parenthèses peuvent être omises – le type des arguments peut être indiqué ● le corps – est une simple expression, la valeur de cette expression est alors renvoyée – un bloc d'instructions, entre { }, peut contenir un ou plusieurs return arguments -> corps
  • 6. antislashn.org Java 8 - les lambdas 6 / 20 Portée des variables ● Une expression lambda se comporte comme un bloc de code { } ● comme les classes anonymes, la lambda peut avoir accès à certaines variables définies dans le contexte engobant ● Il est possible d'utiliser dans le corps de la lambda ● des paramètres passés à l'expression ● des variables définies dans le corps de la lambda ● des variables final du corps englobant ● des variables effectivement final – depuis Java 8 : variables non déclarées final mais qui ne sont jamais modifiées
  • 7. antislashn.org Java 8 - les lambdas 7 / 20 Syntaxe ● Les paramètres ● une lambda peut avoir aucun, un ou plusieurs paramètres ● le type des paramètres peut-être précisé, ou inféré par le compilateur – pas possible de mixer typage et inférence ● les paramètres sont entourés par des parenthèses et séparés par des virgules – aucun paramètre : parenthèses vides – un paramètre : parenthèses facultatives ● les types doivent correspondre à ceux de l'interface fonctionnelle
  • 8. antislashn.org Java 8 - les lambdas 8 / 20 Exemple ● Quelques exemples ● sortis de leur contexte, ce qui explique l'absence de ; () -> System.out.println("hi") (x,y) -> x+y (Point p, int x) -> p.add(x) Arrays.asList(tabString).sort((e1,e2)->e1.compareTo(e2)); (x,y) -> {if(x<y) return y; else return x;} Operation op = (x,y) -> x % y;
  • 9. antislashn.org Java 8 - les lambdas 9 / 20 Utilisation ● Une expression lambda est passée en tant que paramètre à une méthode ● alternative à l'implémentation d'une interface ● elle définit une implémentation pour une interface fonctionnelle ● l'interface fonctionnelle est typée de manière statique – inférence de type par le compilateur
  • 10. antislashn.org Java 8 - les lambdas 10 / 20 Utilisation ● Une lambda ne peut être utilisée que si le compilateur peut en identifier l'utilisation cible ● appelée "target type" ● interface fonctionnelle ● La lambda est transformée par le compilateur en une instance de l'interface fonctionnelle
  • 11. antislashn.org Java 8 - les lambdas 11 / 20 Utilisation ● Exemple d'implémentation d'un Thread ● classe anonyme ● lambda Thread th = new Thread(new Runnable() { @Override public void run() { System.out.println("Traitement à effectuer dans le thread"); } }); th.start(); Thread th = new Thread(()-> System.out.println("Traitement à effectuer dans le thread") ); th.start();
  • 12. antislashn.org Java 8 - les lambdas 12 / 20 Références de méthode ● Raccourci syntaxique pour créer un expression lambda qui invoque une méthode ou un constructeur ● lambda : méthode anonyme dont le type est une interface fonctionnelle ● référence à une méthode : invoque un constructeur ou une méthode statique ● Nouvel opérateur ::
  • 13. antislashn.org Java 8 - les lambdas 13 / 20 Références de méthodes ● Quatre types de références de méthodes ● référence à une méthode statique – class::staticMethod ● référence à une méthode d'instance – oject::method ● référence à un construteur – class::new ● référence une méthode d'un type donné – class::method
  • 14. antislashn.org Java 8 - les lambdas 14 / 20 Référence de méthode ● Appelé une méthode d'instance ● préciser l'instance dans la référence à la méthode ● préciser le type dans la référence à la méthode – alors il faut fournir l'instance en paramètre
  • 15. antislashn.org Java 8 - les lambdas 15 / 20 Références de méthodes ● Exemple ● le corps de l'expression lambda ne fait qu'invoquer une méthode : remplacement par une référence à une méthode JButton button = new JButton(); button.addActionListener(event -> System.out.println(event)); JButton button = new JButton(); button.addActionListener(System.out::println);
  • 16. antislashn.org Java 8 - les lambdas 16 / 20 Références de méthodes ● Exemple de référence à une méthode statique public class MainStaticReference { public static void main(String[] args) { // expression lambda new Thread(() -> compute()).start(); // référence à une méthode statique new Thread(MainStaticReference::compute).start(); } // méthode statique static void compute() { System.out.println("traitement par le thread : " + Thread.currentThread().getName()); } }
  • 17. antislashn.org Java 8 - les lambdas 17 / 20 Références de méthodes ● Exemple de référence à une méthode d'instance public class ContactComparator { public int comparerByNom(Contact c1, Contact c2) { return c1.getNom().compareTo(c2.getPrenom()); } } Contact[] contacts = { new Contact("Mme","Sasseur","Marlène"), new Contact("M","Naudin","Fernand"), new Contact("M","Michalon","Léonard") }; ContactComparator comparator = new ContactComparator(); Arrays.sort(contacts, comparator::comparerByNom); System.out.println(Arrays.deepToString(contacts));
  • 18. antislashn.org Java 8 - les lambdas 18 / 20 Références de méthodes ● Exemple de référence de méthode d'une instance arbitraire String[] jours = {"lundi","mardi","mercredi","jeudi","vendredi","samedi","dimanche"}; // expression Lambda Arrays.sort(jours, (j1,j2) -> j1.compareToIgnoreCase(j2)); // référence vers méthode d'un type unbound Arrays.sort(jours, String::compareToIgnoreCase);
  • 19. antislashn.org Java 8 - les lambdas 19 / 20 Références ● Référence à un constructeur ● le compilateur va déterminé quelle est la signature du constructeur en fonction du contexte public interface ContactSupplier { Contact create(String civilite, String nom, String prenom); } ContactSupplier supplier = Contact::new; Contact contact = supplier.create("M", "Perrin", "François");
  • 20. antislashn.org Java 8 - les lambdas 20 / 20 Références ● https://www.oracle.com/webfolder/technetwork/tutorials/obe/java/Lambda-QuickStart/index.html ● https://docs.oracle.com/javase/tutorial/java/javaOO/lambdaexpressions.html ● https://blog.zenika.com/2012/05/30/java-8-et-les-lambda/ ● https://www.jmdoudoux.fr/java/dej/chap-lambdas.htm#lambdas-3