Java 8 - lambda

Franck SIMON
Franck SIMONConsultant architecte logiciel Java EE et IoT (Internet des Objets) à Transtel
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
1 sur 20

Recommandé

Java 8 - interfaces par
Java 8 - interfacesJava 8 - interfaces
Java 8 - interfacesFranck SIMON
458 vues34 diapositives
Java 8 - collections et stream par
Java 8 - collections et streamJava 8 - collections et stream
Java 8 - collections et streamFranck SIMON
1.5K vues29 diapositives
Chapitre 11: Expression Lambda et Référence de méthode en Java par
Chapitre 11: Expression Lambda et Référence de méthode en JavaChapitre 11: Expression Lambda et Référence de méthode en Java
Chapitre 11: Expression Lambda et Référence de méthode en JavaAziz Darouichi
1.2K vues43 diapositives
Chapitre1: Langage Python par
Chapitre1: Langage PythonChapitre1: Langage Python
Chapitre1: Langage PythonAziz Darouichi
2.4K vues49 diapositives
Chapitre6: Surcharge des opérateurs par
Chapitre6:  Surcharge des opérateursChapitre6:  Surcharge des opérateurs
Chapitre6: Surcharge des opérateursAziz Darouichi
1.3K vues62 diapositives
Chap 6 : classes et interfaces par
Chap 6 : classes et interfacesChap 6 : classes et interfaces
Chap 6 : classes et interfacesAziz Darouichi
785 vues97 diapositives

Contenu connexe

Tendances

Initiation à l'algorithmique par
Initiation à l'algorithmiqueInitiation à l'algorithmique
Initiation à l'algorithmiqueAbdoulaye Dieng
227 vues54 diapositives
Chapitre2fonctionscppv2019 par
Chapitre2fonctionscppv2019Chapitre2fonctionscppv2019
Chapitre2fonctionscppv2019Aziz Darouichi
266 vues147 diapositives
Chap1: Cours en C++ par
Chap1: Cours en C++Chap1: Cours en C++
Chap1: Cours en C++Aziz Darouichi
1.9K vues195 diapositives
Interface fonctionnelle, Lambda expression, méthode par défaut, référence de... par
Interface fonctionnelle, Lambda expression, méthode par défaut,  référence de...Interface fonctionnelle, Lambda expression, méthode par défaut,  référence de...
Interface fonctionnelle, Lambda expression, méthode par défaut, référence de...MICHRAFY MUSTAFA
4.9K vues41 diapositives
Introduction au java par
Introduction  au javaIntroduction  au java
Introduction au javarayeh1
64 vues7 diapositives
Chapitre 2: String en Java par
Chapitre 2:  String en JavaChapitre 2:  String en Java
Chapitre 2: String en JavaAziz Darouichi
868 vues67 diapositives

Tendances(20)

Interface fonctionnelle, Lambda expression, méthode par défaut, référence de... par MICHRAFY MUSTAFA
Interface fonctionnelle, Lambda expression, méthode par défaut,  référence de...Interface fonctionnelle, Lambda expression, méthode par défaut,  référence de...
Interface fonctionnelle, Lambda expression, méthode par défaut, référence de...
MICHRAFY MUSTAFA4.9K vues
Introduction au java par rayeh1
Introduction  au javaIntroduction  au java
Introduction au java
rayeh164 vues
Améliorations dans Java depuis la version 5 par Mamadou Oury Ba
Améliorations dans Java depuis la version 5Améliorations dans Java depuis la version 5
Améliorations dans Java depuis la version 5
Mamadou Oury Ba344 vues
cpp1 : Quelques elements de base du C++ par Abdoulaye Dieng
cpp1 : Quelques elements de base du C++cpp1 : Quelques elements de base du C++
cpp1 : Quelques elements de base du C++
Abdoulaye Dieng495 vues

Similaire à Java 8 - lambda

expression lambda par
expression lambdaexpression lambda
expression lambdaMariam Amchayd
58 vues49 diapositives
Les fonctions lambdas en C++11 et C++14 par
Les fonctions lambdas en C++11 et C++14Les fonctions lambdas en C++11 et C++14
Les fonctions lambdas en C++11 et C++14Aurélien Regat-Barrel
3.2K vues35 diapositives
Introduction java par
Introduction javaIntroduction java
Introduction javaFouad Root
873 vues47 diapositives
Chap3 programmation modulaire en python par
Chap3 programmation modulaire en pythonChap3 programmation modulaire en python
Chap3 programmation modulaire en pythonMariem ZAOUALI
420 vues14 diapositives
Techday Arrow Group: Java 8 par
Techday Arrow Group: Java 8Techday Arrow Group: Java 8
Techday Arrow Group: Java 8Arrow Group
1.1K vues62 diapositives
201305 - Lambda by R. Forax par
201305 - Lambda by R. Forax201305 - Lambda by R. Forax
201305 - Lambda by R. Foraxlyonjug
771 vues42 diapositives

Similaire à Java 8 - lambda(20)

Introduction java par Fouad Root
Introduction javaIntroduction java
Introduction java
Fouad Root873 vues
Chap3 programmation modulaire en python par Mariem ZAOUALI
Chap3 programmation modulaire en pythonChap3 programmation modulaire en python
Chap3 programmation modulaire en python
Mariem ZAOUALI420 vues
Techday Arrow Group: Java 8 par Arrow Group
Techday Arrow Group: Java 8Techday Arrow Group: Java 8
Techday Arrow Group: Java 8
Arrow Group1.1K vues
201305 - Lambda by R. Forax par lyonjug
201305 - Lambda by R. Forax201305 - Lambda by R. Forax
201305 - Lambda by R. Forax
lyonjug771 vues
Introspection reflection par Eric Toguem
Introspection reflectionIntrospection reflection
Introspection reflection
Eric Toguem715 vues
Les bases du langage java par krymo
Les bases du langage javaLes bases du langage java
Les bases du langage java
krymo1.6K vues
Introduction à scala par SOAT
Introduction à scalaIntroduction à scala
Introduction à scala
SOAT2.7K vues
PHP : les fondamentaux (1ère partie) par CodeFormation
PHP : les fondamentaux (1ère partie)PHP : les fondamentaux (1ère partie)
PHP : les fondamentaux (1ère partie)
CodeFormation20 vues

Plus de Franck SIMON

Distribuer une librairie via maven par
Distribuer une librairie via mavenDistribuer une librairie via maven
Distribuer une librairie via mavenFranck SIMON
623 vues15 diapositives
Java 9 modules par
Java 9    modulesJava 9    modules
Java 9 modulesFranck SIMON
532 vues19 diapositives
Java 8 - DateTime par
Java 8 - DateTimeJava 8 - DateTime
Java 8 - DateTimeFranck SIMON
500 vues15 diapositives
Gwt jetty et sources de données par
Gwt   jetty et sources de donnéesGwt   jetty et sources de données
Gwt jetty et sources de donnéesFranck SIMON
976 vues2 diapositives
Description d'un fichier de prélèvements SEPA minimum par
Description d'un fichier de prélèvements SEPA minimumDescription d'un fichier de prélèvements SEPA minimum
Description d'un fichier de prélèvements SEPA minimumFranck SIMON
29.1K vues8 diapositives
Tomcat and apache httpd training par
Tomcat and apache httpd trainingTomcat and apache httpd training
Tomcat and apache httpd trainingFranck SIMON
28K vues278 diapositives

Plus de Franck SIMON(16)

Distribuer une librairie via maven par Franck SIMON
Distribuer une librairie via mavenDistribuer une librairie via maven
Distribuer une librairie via maven
Franck SIMON623 vues
Gwt jetty et sources de données par Franck SIMON
Gwt   jetty et sources de donnéesGwt   jetty et sources de données
Gwt jetty et sources de données
Franck SIMON976 vues
Description d'un fichier de prélèvements SEPA minimum par Franck SIMON
Description d'un fichier de prélèvements SEPA minimumDescription d'un fichier de prélèvements SEPA minimum
Description d'un fichier de prélèvements SEPA minimum
Franck SIMON29.1K vues
Tomcat and apache httpd training par Franck SIMON
Tomcat and apache httpd trainingTomcat and apache httpd training
Tomcat and apache httpd training
Franck SIMON28K vues
Java - programmation concurrente par Franck SIMON
Java - programmation concurrenteJava - programmation concurrente
Java - programmation concurrente
Franck SIMON2.6K vues
Android Input Method Editor par Franck SIMON
Android   Input Method EditorAndroid   Input Method Editor
Android Input Method Editor
Franck SIMON3.9K vues
Architectures distribuées par Franck SIMON
Architectures distribuéesArchitectures distribuées
Architectures distribuées
Franck SIMON10K vues
Développement Android par Franck SIMON
Développement AndroidDéveloppement Android
Développement Android
Franck SIMON27.7K vues

Dernier

Formation M2i - Génération IA : Prenez le train de l'avenir par
Formation M2i - Génération IA : Prenez le train de l'avenirFormation M2i - Génération IA : Prenez le train de l'avenir
Formation M2i - Génération IA : Prenez le train de l'avenirM2i Formation
7 vues38 diapositives
Conception et développement d'une marketplace basée sur l'architecture micros... par
Conception et développement d'une marketplace basée sur l'architecture micros...Conception et développement d'une marketplace basée sur l'architecture micros...
Conception et développement d'une marketplace basée sur l'architecture micros...Adem Amen Allah Thabti
11 vues94 diapositives
Webinaire de formation sur les REL par
Webinaire de formation sur les RELWebinaire de formation sur les REL
Webinaire de formation sur les RELMokhtar Ben Henda
8 vues98 diapositives
La dissertation par
La dissertationLa dissertation
La dissertationGabriel Gay-Para
36 vues19 diapositives
Téophile Alexandre Steinlen.Peintre anarchiste du XIXe sieècle. par
Téophile Alexandre Steinlen.Peintre anarchiste du XIXe sieècle.Téophile Alexandre Steinlen.Peintre anarchiste du XIXe sieècle.
Téophile Alexandre Steinlen.Peintre anarchiste du XIXe sieècle.Txaruka
45 vues18 diapositives
Indicateurs de développement durable pour les municipalités  : sources et rep... par
Indicateurs de développement durable pour les municipalités  : sources et rep...Indicateurs de développement durable pour les municipalités  : sources et rep...
Indicateurs de développement durable pour les municipalités  : sources et rep...Centre GéoStat, Bibliothèque, Université Laval
55 vues48 diapositives

Dernier(11)

Formation M2i - Génération IA : Prenez le train de l'avenir par M2i Formation
Formation M2i - Génération IA : Prenez le train de l'avenirFormation M2i - Génération IA : Prenez le train de l'avenir
Formation M2i - Génération IA : Prenez le train de l'avenir
M2i Formation7 vues
Conception et développement d'une marketplace basée sur l'architecture micros... par Adem Amen Allah Thabti
Conception et développement d'une marketplace basée sur l'architecture micros...Conception et développement d'une marketplace basée sur l'architecture micros...
Conception et développement d'une marketplace basée sur l'architecture micros...
Téophile Alexandre Steinlen.Peintre anarchiste du XIXe sieècle. par Txaruka
Téophile Alexandre Steinlen.Peintre anarchiste du XIXe sieècle.Téophile Alexandre Steinlen.Peintre anarchiste du XIXe sieècle.
Téophile Alexandre Steinlen.Peintre anarchiste du XIXe sieècle.
Txaruka45 vues
Exercice de révision SE - IPSET.pdf par MedBechir
Exercice de révision SE - IPSET.pdfExercice de révision SE - IPSET.pdf
Exercice de révision SE - IPSET.pdf
MedBechir10 vues
La conscience d'être libre est-elle illusoire ? (G. Gay-Para) par Gabriel Gay-Para
La conscience d'être libre est-elle illusoire ? (G. Gay-Para)La conscience d'être libre est-elle illusoire ? (G. Gay-Para)
La conscience d'être libre est-elle illusoire ? (G. Gay-Para)

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