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

Weitere ähnliche Inhalte

Was ist angesagt?

Initiation à l'algorithmique
Initiation à l'algorithmiqueInitiation à l'algorithmique
Initiation à l'algorithmiqueAbdoulaye Dieng
 
Chapitre2fonctionscppv2019
Chapitre2fonctionscppv2019Chapitre2fonctionscppv2019
Chapitre2fonctionscppv2019Aziz Darouichi
 
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...
Interface fonctionnelle, Lambda expression, méthode par défaut, référence de...MICHRAFY MUSTAFA
 
Introduction au java
Introduction  au javaIntroduction  au java
Introduction au javarayeh1
 
Chapitre 2: String en Java
Chapitre 2:  String en JavaChapitre 2:  String en Java
Chapitre 2: String en JavaAziz Darouichi
 
Chapitre5: Classes et objets
Chapitre5: Classes et objetsChapitre5: Classes et objets
Chapitre5: Classes et objetsAziz Darouichi
 
Améliorations dans Java depuis la version 5
Améliorations dans Java depuis la version 5Améliorations dans Java depuis la version 5
Améliorations dans Java depuis la version 5Mamadou Oury Ba
 
La programmation modulaire en Python
La programmation modulaire en PythonLa programmation modulaire en Python
La programmation modulaire en PythonABDESSELAM ARROU
 
Csharp1 : quelques elements de base
Csharp1 :  quelques elements de baseCsharp1 :  quelques elements de base
Csharp1 : quelques elements de baseAbdoulaye Dieng
 
cpp1 : Quelques elements de base du C++
cpp1 : Quelques elements de base du C++cpp1 : Quelques elements de base du C++
cpp1 : Quelques elements de base du C++Abdoulaye Dieng
 
Chap1V2019: Cours en C++
Chap1V2019: Cours en C++Chap1V2019: Cours en C++
Chap1V2019: Cours en C++Aziz Darouichi
 
Cpp2 : classes et objets
Cpp2 : classes et objetsCpp2 : classes et objets
Cpp2 : classes et objetsAbdoulaye Dieng
 

Was ist angesagt? (20)

Initiation à l'algorithmique
Initiation à l'algorithmiqueInitiation à l'algorithmique
Initiation à l'algorithmique
 
Chapitre2fonctionscppv2019
Chapitre2fonctionscppv2019Chapitre2fonctionscppv2019
Chapitre2fonctionscppv2019
 
Chap1: Cours en C++
Chap1: Cours en C++Chap1: Cours en C++
Chap1: Cours en C++
 
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...
Interface fonctionnelle, Lambda expression, méthode par défaut, référence de...
 
Introduction au java
Introduction  au javaIntroduction  au java
Introduction au java
 
Chapitre 2: String en Java
Chapitre 2:  String en JavaChapitre 2:  String en Java
Chapitre 2: String en Java
 
Chapitre5: Classes et objets
Chapitre5: Classes et objetsChapitre5: Classes et objets
Chapitre5: Classes et objets
 
Chap2fonctionscpp
Chap2fonctionscppChap2fonctionscpp
Chap2fonctionscpp
 
JAVA
JAVAJAVA
JAVA
 
Introduction a Java
Introduction a JavaIntroduction a Java
Introduction a Java
 
JAVA 8
JAVA 8JAVA 8
JAVA 8
 
Cours java script
Cours java scriptCours java script
Cours java script
 
Améliorations dans Java depuis la version 5
Améliorations dans Java depuis la version 5Améliorations dans Java depuis la version 5
Améliorations dans Java depuis la version 5
 
La programmation modulaire en Python
La programmation modulaire en PythonLa programmation modulaire en Python
La programmation modulaire en Python
 
Exceptions
ExceptionsExceptions
Exceptions
 
Csharp1 : quelques elements de base
Csharp1 :  quelques elements de baseCsharp1 :  quelques elements de base
Csharp1 : quelques elements de base
 
cpp1 : Quelques elements de base du C++
cpp1 : Quelques elements de base du C++cpp1 : Quelques elements de base du C++
cpp1 : Quelques elements de base du C++
 
Chap1V2019: Cours en C++
Chap1V2019: Cours en C++Chap1V2019: Cours en C++
Chap1V2019: Cours en C++
 
Cpp2 : classes et objets
Cpp2 : classes et objetsCpp2 : classes et objets
Cpp2 : classes et objets
 
Introduction à Python
Introduction à PythonIntroduction à Python
Introduction à Python
 

Ähnlich wie Java 8 - lambda

Les fonctions lambdas en C++11 et C++14
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
 
Introduction java
Introduction javaIntroduction java
Introduction javaFouad Root
 
Chap3 programmation modulaire en python
Chap3 programmation modulaire en pythonChap3 programmation modulaire en python
Chap3 programmation modulaire en pythonMariem ZAOUALI
 
Techday Arrow Group: Java 8
Techday Arrow Group: Java 8Techday Arrow Group: Java 8
Techday Arrow Group: Java 8Arrow Group
 
201305 - Lambda by R. Forax
201305 - Lambda by R. Forax201305 - Lambda by R. Forax
201305 - Lambda by R. Foraxlyonjug
 
Les bases de la programmation en JAVA
Les bases de la programmation  en JAVA   Les bases de la programmation  en JAVA
Les bases de la programmation en JAVA Asmaa BENGUEDDACH
 
introJavaScript.ppt
introJavaScript.pptintroJavaScript.ppt
introJavaScript.pptMarwenJAZI
 
Introspection reflection
Introspection reflectionIntrospection reflection
Introspection reflectionEric Toguem
 
Les bases du langage java
Les bases du langage javaLes bases du langage java
Les bases du langage javakrymo
 
Java1_BasesLangage.pdf
Java1_BasesLangage.pdfJava1_BasesLangage.pdf
Java1_BasesLangage.pdfLarbaSAWADOGO2
 
Java1_BasesLangage.pdf
Java1_BasesLangage.pdfJava1_BasesLangage.pdf
Java1_BasesLangage.pdfLarbaSAWADOGO2
 
Introduction à scala
Introduction à scalaIntroduction à scala
Introduction à scalaSOAT
 
Bases de php - Partie 3
Bases de php - Partie 3Bases de php - Partie 3
Bases de php - Partie 3Régis Lutter
 
15-Concurrence-Operations-Atomiques.pdf
15-Concurrence-Operations-Atomiques.pdf15-Concurrence-Operations-Atomiques.pdf
15-Concurrence-Operations-Atomiques.pdfPatiento Del Mar
 
PHP : les fondamentaux (1ère partie)
PHP : les fondamentaux (1ère partie)PHP : les fondamentaux (1ère partie)
PHP : les fondamentaux (1ère partie)CodeFormation
 
Cours java smi 2007 2008
Cours java smi 2007 2008Cours java smi 2007 2008
Cours java smi 2007 2008Khalil Lechheb
 
Cours java smi 2007 2008
Cours java smi 2007 2008Cours java smi 2007 2008
Cours java smi 2007 2008Khalil Lechheb
 

Ähnlich wie Java 8 - lambda (20)

expression lambda
expression lambdaexpression lambda
expression lambda
 
Les fonctions lambdas en C++11 et C++14
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++14
 
Introduction java
Introduction javaIntroduction java
Introduction java
 
Chap3 programmation modulaire en python
Chap3 programmation modulaire en pythonChap3 programmation modulaire en python
Chap3 programmation modulaire en python
 
Techday Arrow Group: Java 8
Techday Arrow Group: Java 8Techday Arrow Group: Java 8
Techday Arrow Group: Java 8
 
201305 - Lambda by R. Forax
201305 - Lambda by R. Forax201305 - Lambda by R. Forax
201305 - Lambda by R. Forax
 
Les bases de la programmation en JAVA
Les bases de la programmation  en JAVA   Les bases de la programmation  en JAVA
Les bases de la programmation en JAVA
 
introJavaScript.ppt
introJavaScript.pptintroJavaScript.ppt
introJavaScript.ppt
 
Algorithmique
AlgorithmiqueAlgorithmique
Algorithmique
 
Introspection reflection
Introspection reflectionIntrospection reflection
Introspection reflection
 
Generalites
GeneralitesGeneralites
Generalites
 
Les bases du langage java
Les bases du langage javaLes bases du langage java
Les bases du langage java
 
Java1_BasesLangage.pdf
Java1_BasesLangage.pdfJava1_BasesLangage.pdf
Java1_BasesLangage.pdf
 
Java1_BasesLangage.pdf
Java1_BasesLangage.pdfJava1_BasesLangage.pdf
Java1_BasesLangage.pdf
 
Introduction à scala
Introduction à scalaIntroduction à scala
Introduction à scala
 
Bases de php - Partie 3
Bases de php - Partie 3Bases de php - Partie 3
Bases de php - Partie 3
 
15-Concurrence-Operations-Atomiques.pdf
15-Concurrence-Operations-Atomiques.pdf15-Concurrence-Operations-Atomiques.pdf
15-Concurrence-Operations-Atomiques.pdf
 
PHP : les fondamentaux (1ère partie)
PHP : les fondamentaux (1ère partie)PHP : les fondamentaux (1ère partie)
PHP : les fondamentaux (1ère partie)
 
Cours java smi 2007 2008
Cours java smi 2007 2008Cours java smi 2007 2008
Cours java smi 2007 2008
 
Cours java smi 2007 2008
Cours java smi 2007 2008Cours java smi 2007 2008
Cours java smi 2007 2008
 

Mehr von Franck SIMON

Distribuer une librairie via maven
Distribuer une librairie via mavenDistribuer une librairie via maven
Distribuer une librairie via mavenFranck SIMON
 
Gwt jetty et sources de données
Gwt   jetty et sources de donnéesGwt   jetty et sources de données
Gwt jetty et sources de donnéesFranck SIMON
 
Description d'un fichier de prélèvements SEPA minimum
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
 
Tomcat and apache httpd training
Tomcat and apache httpd trainingTomcat and apache httpd training
Tomcat and apache httpd trainingFranck SIMON
 
JBoss - chapitre JMX
JBoss - chapitre JMXJBoss - chapitre JMX
JBoss - chapitre JMXFranck SIMON
 
Java - programmation concurrente
Java - programmation concurrenteJava - programmation concurrente
Java - programmation concurrenteFranck SIMON
 
Android Input Method Editor
Android   Input Method EditorAndroid   Input Method Editor
Android Input Method EditorFranck SIMON
 
Architectures distribuées
Architectures distribuéesArchitectures distribuées
Architectures distribuéesFranck SIMON
 
Développement Android
Développement AndroidDéveloppement Android
Développement AndroidFranck SIMON
 
Java scripting api
Java scripting apiJava scripting api
Java scripting apiFranck SIMON
 

Mehr von Franck SIMON (16)

Distribuer une librairie via maven
Distribuer une librairie via mavenDistribuer une librairie via maven
Distribuer une librairie via maven
 
Java 9 modules
Java 9    modulesJava 9    modules
Java 9 modules
 
Java 8 - DateTime
Java 8 - DateTimeJava 8 - DateTime
Java 8 - DateTime
 
Gwt jetty et sources de données
Gwt   jetty et sources de donnéesGwt   jetty et sources de données
Gwt jetty et sources de données
 
Description d'un fichier de prélèvements SEPA minimum
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
 
Tomcat and apache httpd training
Tomcat and apache httpd trainingTomcat and apache httpd training
Tomcat and apache httpd training
 
Android ORMLite
Android   ORMLiteAndroid   ORMLite
Android ORMLite
 
JBoss - chapitre JMX
JBoss - chapitre JMXJBoss - chapitre JMX
JBoss - chapitre JMX
 
Java - programmation concurrente
Java - programmation concurrenteJava - programmation concurrente
Java - programmation concurrente
 
Android Input Method Editor
Android   Input Method EditorAndroid   Input Method Editor
Android Input Method Editor
 
Squid
SquidSquid
Squid
 
Architectures distribuées
Architectures distribuéesArchitectures distribuées
Architectures distribuées
 
Android NDK
Android   NDKAndroid   NDK
Android NDK
 
Développement Android
Développement AndroidDéveloppement Android
Développement Android
 
jQuery
jQueryjQuery
jQuery
 
Java scripting api
Java scripting apiJava scripting api
Java scripting api
 

Kürzlich hochgeladen

SUPPORT DE SUR COURS_GOUVERNANCE_SI_M2.pptx
SUPPORT DE SUR COURS_GOUVERNANCE_SI_M2.pptxSUPPORT DE SUR COURS_GOUVERNANCE_SI_M2.pptx
SUPPORT DE SUR COURS_GOUVERNANCE_SI_M2.pptxssuserbd075f
 
Approche-des-risques-par-l’analyse-des-accidents-1.pptx
Approche-des-risques-par-l’analyse-des-accidents-1.pptxApproche-des-risques-par-l’analyse-des-accidents-1.pptx
Approche-des-risques-par-l’analyse-des-accidents-1.pptxssusercbaa22
 
Cours-irrigation_et_drainage_cours1.pptx
Cours-irrigation_et_drainage_cours1.pptxCours-irrigation_et_drainage_cours1.pptx
Cours-irrigation_et_drainage_cours1.pptxlamourfrantz
 
Fondation Louis Vuitton. pptx
Fondation      Louis      Vuitton.   pptxFondation      Louis      Vuitton.   pptx
Fondation Louis Vuitton. pptxTxaruka
 
Présentation de cartes d'extension zhr..pptx
Présentation de cartes d'extension zhr..pptxPrésentation de cartes d'extension zhr..pptx
Présentation de cartes d'extension zhr..pptxpopzair
 
La nouvelle femme . pptx Film français
La   nouvelle   femme  . pptx  Film françaisLa   nouvelle   femme  . pptx  Film français
La nouvelle femme . pptx Film françaisTxaruka
 
gestion des conflits dans les entreprises
gestion des  conflits dans les entreprisesgestion des  conflits dans les entreprises
gestion des conflits dans les entreprisesMajdaKtiri2
 
A3iFormations, organisme de formations certifié qualiopi.
A3iFormations, organisme de formations certifié qualiopi.A3iFormations, organisme de formations certifié qualiopi.
A3iFormations, organisme de formations certifié qualiopi.Franck Apolis
 
presentation l'interactionnisme symbolique finale.pptx
presentation l'interactionnisme symbolique  finale.pptxpresentation l'interactionnisme symbolique  finale.pptx
presentation l'interactionnisme symbolique finale.pptxMalikaIdseaid1
 
Boléro. pptx Film français réalisé par une femme.
Boléro.  pptx   Film   français   réalisé  par une  femme.Boléro.  pptx   Film   français   réalisé  par une  femme.
Boléro. pptx Film français réalisé par une femme.Txaruka
 
Sidonie au Japon . pptx Un film français
Sidonie    au   Japon  .  pptx  Un film françaisSidonie    au   Japon  .  pptx  Un film français
Sidonie au Japon . pptx Un film françaisTxaruka
 
Formation M2i - Intelligence Artificielle Comment booster votre productivité ...
Formation M2i - Intelligence Artificielle Comment booster votre productivité ...Formation M2i - Intelligence Artificielle Comment booster votre productivité ...
Formation M2i - Intelligence Artificielle Comment booster votre productivité ...M2i Formation
 
présentation sur l'échafaudage dans des travaux en hauteur
présentation sur l'échafaudage dans des travaux en hauteurprésentation sur l'échafaudage dans des travaux en hauteur
présentation sur l'échafaudage dans des travaux en hauteurdinaelchaine
 
Mécanique Automobile LE TURBOCOMPRESSEUR.ppt
Mécanique Automobile LE TURBOCOMPRESSEUR.pptMécanique Automobile LE TURBOCOMPRESSEUR.ppt
Mécanique Automobile LE TURBOCOMPRESSEUR.pptssusercbaa22
 
MaintenanceLa Maintenance Corrective.ppt
MaintenanceLa Maintenance Corrective.pptMaintenanceLa Maintenance Corrective.ppt
MaintenanceLa Maintenance Corrective.pptssusercbaa22
 
Grammaire pour les élèves de la 6ème.doc
Grammaire pour les élèves de la  6ème.docGrammaire pour les élèves de la  6ème.doc
Grammaire pour les élèves de la 6ème.docKarimKhrifech
 
LA MONTÉE DE L'ÉDUCATION DANS LE MONDE DE LA PRÉHISTOIRE À L'ÈRE CONTEMPORAIN...
LA MONTÉE DE L'ÉDUCATION DANS LE MONDE DE LA PRÉHISTOIRE À L'ÈRE CONTEMPORAIN...LA MONTÉE DE L'ÉDUCATION DANS LE MONDE DE LA PRÉHISTOIRE À L'ÈRE CONTEMPORAIN...
LA MONTÉE DE L'ÉDUCATION DANS LE MONDE DE LA PRÉHISTOIRE À L'ÈRE CONTEMPORAIN...Faga1939
 
COURS SVT 3 EME ANNEE COLLEGE 2EME SEM.pdf
COURS SVT 3 EME ANNEE COLLEGE 2EME SEM.pdfCOURS SVT 3 EME ANNEE COLLEGE 2EME SEM.pdf
COURS SVT 3 EME ANNEE COLLEGE 2EME SEM.pdfabatanebureau
 

Kürzlich hochgeladen (20)

SUPPORT DE SUR COURS_GOUVERNANCE_SI_M2.pptx
SUPPORT DE SUR COURS_GOUVERNANCE_SI_M2.pptxSUPPORT DE SUR COURS_GOUVERNANCE_SI_M2.pptx
SUPPORT DE SUR COURS_GOUVERNANCE_SI_M2.pptx
 
Approche-des-risques-par-l’analyse-des-accidents-1.pptx
Approche-des-risques-par-l’analyse-des-accidents-1.pptxApproche-des-risques-par-l’analyse-des-accidents-1.pptx
Approche-des-risques-par-l’analyse-des-accidents-1.pptx
 
Cours-irrigation_et_drainage_cours1.pptx
Cours-irrigation_et_drainage_cours1.pptxCours-irrigation_et_drainage_cours1.pptx
Cours-irrigation_et_drainage_cours1.pptx
 
Fondation Louis Vuitton. pptx
Fondation      Louis      Vuitton.   pptxFondation      Louis      Vuitton.   pptx
Fondation Louis Vuitton. pptx
 
Présentation de cartes d'extension zhr..pptx
Présentation de cartes d'extension zhr..pptxPrésentation de cartes d'extension zhr..pptx
Présentation de cartes d'extension zhr..pptx
 
La nouvelle femme . pptx Film français
La   nouvelle   femme  . pptx  Film françaisLa   nouvelle   femme  . pptx  Film français
La nouvelle femme . pptx Film français
 
gestion des conflits dans les entreprises
gestion des  conflits dans les entreprisesgestion des  conflits dans les entreprises
gestion des conflits dans les entreprises
 
A3iFormations, organisme de formations certifié qualiopi.
A3iFormations, organisme de formations certifié qualiopi.A3iFormations, organisme de formations certifié qualiopi.
A3iFormations, organisme de formations certifié qualiopi.
 
presentation l'interactionnisme symbolique finale.pptx
presentation l'interactionnisme symbolique  finale.pptxpresentation l'interactionnisme symbolique  finale.pptx
presentation l'interactionnisme symbolique finale.pptx
 
Boléro. pptx Film français réalisé par une femme.
Boléro.  pptx   Film   français   réalisé  par une  femme.Boléro.  pptx   Film   français   réalisé  par une  femme.
Boléro. pptx Film français réalisé par une femme.
 
Sidonie au Japon . pptx Un film français
Sidonie    au   Japon  .  pptx  Un film françaisSidonie    au   Japon  .  pptx  Un film français
Sidonie au Japon . pptx Un film français
 
Pâques de Sainte Marie-Euphrasie Pelletier
Pâques de Sainte Marie-Euphrasie PelletierPâques de Sainte Marie-Euphrasie Pelletier
Pâques de Sainte Marie-Euphrasie Pelletier
 
Formation M2i - Intelligence Artificielle Comment booster votre productivité ...
Formation M2i - Intelligence Artificielle Comment booster votre productivité ...Formation M2i - Intelligence Artificielle Comment booster votre productivité ...
Formation M2i - Intelligence Artificielle Comment booster votre productivité ...
 
présentation sur l'échafaudage dans des travaux en hauteur
présentation sur l'échafaudage dans des travaux en hauteurprésentation sur l'échafaudage dans des travaux en hauteur
présentation sur l'échafaudage dans des travaux en hauteur
 
Mécanique Automobile LE TURBOCOMPRESSEUR.ppt
Mécanique Automobile LE TURBOCOMPRESSEUR.pptMécanique Automobile LE TURBOCOMPRESSEUR.ppt
Mécanique Automobile LE TURBOCOMPRESSEUR.ppt
 
MaintenanceLa Maintenance Corrective.ppt
MaintenanceLa Maintenance Corrective.pptMaintenanceLa Maintenance Corrective.ppt
MaintenanceLa Maintenance Corrective.ppt
 
Grammaire pour les élèves de la 6ème.doc
Grammaire pour les élèves de la  6ème.docGrammaire pour les élèves de la  6ème.doc
Grammaire pour les élèves de la 6ème.doc
 
LA MONTÉE DE L'ÉDUCATION DANS LE MONDE DE LA PRÉHISTOIRE À L'ÈRE CONTEMPORAIN...
LA MONTÉE DE L'ÉDUCATION DANS LE MONDE DE LA PRÉHISTOIRE À L'ÈRE CONTEMPORAIN...LA MONTÉE DE L'ÉDUCATION DANS LE MONDE DE LA PRÉHISTOIRE À L'ÈRE CONTEMPORAIN...
LA MONTÉE DE L'ÉDUCATION DANS LE MONDE DE LA PRÉHISTOIRE À L'ÈRE CONTEMPORAIN...
 
COURS SVT 3 EME ANNEE COLLEGE 2EME SEM.pdf
COURS SVT 3 EME ANNEE COLLEGE 2EME SEM.pdfCOURS SVT 3 EME ANNEE COLLEGE 2EME SEM.pdf
COURS SVT 3 EME ANNEE COLLEGE 2EME SEM.pdf
 
Evaluación Alumnos de Ecole Victor Hugo
Evaluación Alumnos de Ecole  Victor HugoEvaluación Alumnos de Ecole  Victor Hugo
Evaluación Alumnos de Ecole Victor Hugo
 

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