SlideShare une entreprise Scribd logo
1  sur  20
Télécharger pour lire hors ligne
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

Tendances

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
 

Tendances (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
 

Similaire à 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
 

Similaire à 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
 

Plus de 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
 

Plus de 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
 

Dernier

SciencesPo_Aix_InnovationPédagogique_Atelier_IA.pdf
SciencesPo_Aix_InnovationPédagogique_Atelier_IA.pdfSciencesPo_Aix_InnovationPédagogique_Atelier_IA.pdf
SciencesPo_Aix_InnovationPédagogique_Atelier_IA.pdfSKennel
 
SciencesPo_Aix_InnovationPédagogique_Bilan.pdf
SciencesPo_Aix_InnovationPédagogique_Bilan.pdfSciencesPo_Aix_InnovationPédagogique_Bilan.pdf
SciencesPo_Aix_InnovationPédagogique_Bilan.pdfSKennel
 
PIE-A2-P4-support stagiaires sept 22-validé.pdf
PIE-A2-P4-support stagiaires sept 22-validé.pdfPIE-A2-P4-support stagiaires sept 22-validé.pdf
PIE-A2-P4-support stagiaires sept 22-validé.pdfRiDaHAziz
 
PIE-A2-P 5- Supports stagiaires.pptx.pdf
PIE-A2-P 5- Supports stagiaires.pptx.pdfPIE-A2-P 5- Supports stagiaires.pptx.pdf
PIE-A2-P 5- Supports stagiaires.pptx.pdfRiDaHAziz
 
SciencesPo_Aix_InnovationPédagogique_Atelier_EtudiantActeur.pdf
SciencesPo_Aix_InnovationPédagogique_Atelier_EtudiantActeur.pdfSciencesPo_Aix_InnovationPédagogique_Atelier_EtudiantActeur.pdf
SciencesPo_Aix_InnovationPédagogique_Atelier_EtudiantActeur.pdfSKennel
 
Principe de fonctionnement d'un moteur 4 temps
Principe de fonctionnement d'un moteur 4 tempsPrincipe de fonctionnement d'un moteur 4 temps
Principe de fonctionnement d'un moteur 4 tempsRajiAbdelghani
 
Bibdoc 2024 - Les maillons de la chaine du livre face aux enjeux écologiques.pdf
Bibdoc 2024 - Les maillons de la chaine du livre face aux enjeux écologiques.pdfBibdoc 2024 - Les maillons de la chaine du livre face aux enjeux écologiques.pdf
Bibdoc 2024 - Les maillons de la chaine du livre face aux enjeux écologiques.pdfBibdoc 37
 
Bibdoc 2024 - Ecologie du livre et creation de badge.pdf
Bibdoc 2024 - Ecologie du livre et creation de badge.pdfBibdoc 2024 - Ecologie du livre et creation de badge.pdf
Bibdoc 2024 - Ecologie du livre et creation de badge.pdfBibdoc 37
 
Cours SE Gestion des périphériques - IG IPSET
Cours SE Gestion des périphériques - IG IPSETCours SE Gestion des périphériques - IG IPSET
Cours SE Gestion des périphériques - IG IPSETMedBechir
 
Le Lean sur une ligne de production : Formation et mise en application directe
Le Lean sur une ligne de production : Formation et mise en application directeLe Lean sur une ligne de production : Formation et mise en application directe
Le Lean sur une ligne de production : Formation et mise en application directeXL Groupe
 
Zotero avancé - support de formation doctorants SHS 2024
Zotero avancé - support de formation doctorants SHS 2024Zotero avancé - support de formation doctorants SHS 2024
Zotero avancé - support de formation doctorants SHS 2024Alain Marois
 
Cours SE Le système Linux : La ligne de commande bash - IG IPSET
Cours SE Le système Linux : La ligne de commande bash - IG IPSETCours SE Le système Linux : La ligne de commande bash - IG IPSET
Cours SE Le système Linux : La ligne de commande bash - IG IPSETMedBechir
 
SciencesPo_Aix_InnovationPédagogique_Conférence_SK.pdf
SciencesPo_Aix_InnovationPédagogique_Conférence_SK.pdfSciencesPo_Aix_InnovationPédagogique_Conférence_SK.pdf
SciencesPo_Aix_InnovationPédagogique_Conférence_SK.pdfSKennel
 
Presentation de la plateforme Moodle - avril 2024
Presentation de la plateforme Moodle - avril 2024Presentation de la plateforme Moodle - avril 2024
Presentation de la plateforme Moodle - avril 2024Gilles Le Page
 
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
 
Annie Ernaux Extérieurs. pptx. Exposition basée sur un livre .
Annie   Ernaux  Extérieurs. pptx. Exposition basée sur un livre .Annie   Ernaux  Extérieurs. pptx. Exposition basée sur un livre .
Annie Ernaux Extérieurs. pptx. Exposition basée sur un livre .Txaruka
 
Bernard Réquichot.pptx Peintre français
Bernard Réquichot.pptx   Peintre françaisBernard Réquichot.pptx   Peintre français
Bernard Réquichot.pptx Peintre françaisTxaruka
 
SciencesPo_Aix_InnovationPédagogique_Atelier_FormationRecherche.pdf
SciencesPo_Aix_InnovationPédagogique_Atelier_FormationRecherche.pdfSciencesPo_Aix_InnovationPédagogique_Atelier_FormationRecherche.pdf
SciencesPo_Aix_InnovationPédagogique_Atelier_FormationRecherche.pdfSKennel
 

Dernier (19)

SciencesPo_Aix_InnovationPédagogique_Atelier_IA.pdf
SciencesPo_Aix_InnovationPédagogique_Atelier_IA.pdfSciencesPo_Aix_InnovationPédagogique_Atelier_IA.pdf
SciencesPo_Aix_InnovationPédagogique_Atelier_IA.pdf
 
SciencesPo_Aix_InnovationPédagogique_Bilan.pdf
SciencesPo_Aix_InnovationPédagogique_Bilan.pdfSciencesPo_Aix_InnovationPédagogique_Bilan.pdf
SciencesPo_Aix_InnovationPédagogique_Bilan.pdf
 
PIE-A2-P4-support stagiaires sept 22-validé.pdf
PIE-A2-P4-support stagiaires sept 22-validé.pdfPIE-A2-P4-support stagiaires sept 22-validé.pdf
PIE-A2-P4-support stagiaires sept 22-validé.pdf
 
PIE-A2-P 5- Supports stagiaires.pptx.pdf
PIE-A2-P 5- Supports stagiaires.pptx.pdfPIE-A2-P 5- Supports stagiaires.pptx.pdf
PIE-A2-P 5- Supports stagiaires.pptx.pdf
 
SciencesPo_Aix_InnovationPédagogique_Atelier_EtudiantActeur.pdf
SciencesPo_Aix_InnovationPédagogique_Atelier_EtudiantActeur.pdfSciencesPo_Aix_InnovationPédagogique_Atelier_EtudiantActeur.pdf
SciencesPo_Aix_InnovationPédagogique_Atelier_EtudiantActeur.pdf
 
Principe de fonctionnement d'un moteur 4 temps
Principe de fonctionnement d'un moteur 4 tempsPrincipe de fonctionnement d'un moteur 4 temps
Principe de fonctionnement d'un moteur 4 temps
 
Bibdoc 2024 - Les maillons de la chaine du livre face aux enjeux écologiques.pdf
Bibdoc 2024 - Les maillons de la chaine du livre face aux enjeux écologiques.pdfBibdoc 2024 - Les maillons de la chaine du livre face aux enjeux écologiques.pdf
Bibdoc 2024 - Les maillons de la chaine du livre face aux enjeux écologiques.pdf
 
Bibdoc 2024 - Ecologie du livre et creation de badge.pdf
Bibdoc 2024 - Ecologie du livre et creation de badge.pdfBibdoc 2024 - Ecologie du livre et creation de badge.pdf
Bibdoc 2024 - Ecologie du livre et creation de badge.pdf
 
Cours SE Gestion des périphériques - IG IPSET
Cours SE Gestion des périphériques - IG IPSETCours SE Gestion des périphériques - IG IPSET
Cours SE Gestion des périphériques - IG IPSET
 
Le Lean sur une ligne de production : Formation et mise en application directe
Le Lean sur une ligne de production : Formation et mise en application directeLe Lean sur une ligne de production : Formation et mise en application directe
Le Lean sur une ligne de production : Formation et mise en application directe
 
Zotero avancé - support de formation doctorants SHS 2024
Zotero avancé - support de formation doctorants SHS 2024Zotero avancé - support de formation doctorants SHS 2024
Zotero avancé - support de formation doctorants SHS 2024
 
Cours SE Le système Linux : La ligne de commande bash - IG IPSET
Cours SE Le système Linux : La ligne de commande bash - IG IPSETCours SE Le système Linux : La ligne de commande bash - IG IPSET
Cours SE Le système Linux : La ligne de commande bash - IG IPSET
 
SciencesPo_Aix_InnovationPédagogique_Conférence_SK.pdf
SciencesPo_Aix_InnovationPédagogique_Conférence_SK.pdfSciencesPo_Aix_InnovationPédagogique_Conférence_SK.pdf
SciencesPo_Aix_InnovationPédagogique_Conférence_SK.pdf
 
Presentation de la plateforme Moodle - avril 2024
Presentation de la plateforme Moodle - avril 2024Presentation de la plateforme Moodle - avril 2024
Presentation de la plateforme Moodle - avril 2024
 
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...
 
Annie Ernaux Extérieurs. pptx. Exposition basée sur un livre .
Annie   Ernaux  Extérieurs. pptx. Exposition basée sur un livre .Annie   Ernaux  Extérieurs. pptx. Exposition basée sur un livre .
Annie Ernaux Extérieurs. pptx. Exposition basée sur un livre .
 
Bernard Réquichot.pptx Peintre français
Bernard Réquichot.pptx   Peintre françaisBernard Réquichot.pptx   Peintre français
Bernard Réquichot.pptx Peintre français
 
DO PALÁCIO À ASSEMBLEIA .
DO PALÁCIO À ASSEMBLEIA                 .DO PALÁCIO À ASSEMBLEIA                 .
DO PALÁCIO À ASSEMBLEIA .
 
SciencesPo_Aix_InnovationPédagogique_Atelier_FormationRecherche.pdf
SciencesPo_Aix_InnovationPédagogique_Atelier_FormationRecherche.pdfSciencesPo_Aix_InnovationPédagogique_Atelier_FormationRecherche.pdf
SciencesPo_Aix_InnovationPédagogique_Atelier_FormationRecherche.pdf
 

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