<!-- Slide number: 1 -->
Conception par Objet et Programmation Java
1

Chapitre 9 : Lambda Expression
Equipe Java
2019-2020

Notes:
<!-- Slide number: 2 -->
Plan
‹#›
Introduction
Classe et objet
Encapsulation
Héritage
Polymorphisme
Exceptions
Interfaces
Collections
Lambda Expression
Stream
Notes:
Publicité
<!-- Slide number: 3 -->
Objectifs
‹#›
Introduire le concept Lambda Expression
Introduire le syntaxe Lambda Expression
Implémentation des interfaces fonctionnelles
Notes:
<!-- Slide number: 4 -->
Lambda Expression: Définition
‹#›
Lambdas expression est considérée comme la plus grosse nouveauté de Java 8, c’est une forme de méthode, plus compacte qu’une méthode standard, pour laquelle le nom est implicite et les paramètres peuvent être omis, tout comme leur type ou une valeur de retour.
Notes:
<!-- Slide number: 5 -->
Lambda Expression: Définition
‹#›
Lambda Expression est une manière simplifiée pour l'implémentation d'une interface qui n'a qu'une seule méthode abstraite (SAM)..
Lambda Expressions sont des fonctions anonymes
Notes:
<!-- Slide number: 6 -->
Lambda Expression: Syntaxe
‹#›

Body of the Lambda may throw exceptions
Publicité
Single line Lambdas – Do not need braces – Do not need an explicit return statement
Lambdas with a single parameter do not need brackets
Lambdas with no parameters must have empty brackets
Notes:
<!-- Slide number: 7 -->
Lambda Expression: Syntaxe Exemples
‹#›
- () -> System.out.println("Hello Lambda")
- x -> x + 10
- (int x, int y) -> { return x + y; }
- (String x, String y) -> x.length() – y.length()
- (String x) -> { listA.add(x); listB.remove(x); return listB.size(); }
Notes:
<!-- Slide number: 8 -->
Lambda Expression: Target Type
‹#›
En Java le type d’une expression lambda une connu sous le nom d'une interface fonctionnelle.
Puisque une interface fonctionnelle ne peut avoir qu'une seule méthode abstraite, les types des paramètres de l'expression Lambda doivent correspondre aux paramètres de cette méthode, et le type du corps de lambda doit correspondre au type de retour de la méthode
Notes:
<!-- Slide number: 9 -->
Lambda Expression: Implémentations des interfaces fonctionnelles
‹#›
• Function
Une interface "Function" prend un argument et retourne un résultat dont la méthode fonctionnelle est "apply(Object)".
• Supplier
L’interface "Supplier" produise un résultat d'un type donnée. Contrairement à l’interface "Function", "Supplier" n’accepte pas les arguments. La méthode abstraite de cette interface est "get()".

Publicité

Notes:
<!-- Slide number: 10 -->
Lambda ExpressionImplémentations des interfaces fonctionnelles
‹#›
• Consumer
L’interface "Consumer" représente une opération qui accepte un seul argument et ne renvoie aucun résultat. La méthode abstraite de cette interface est "accept(Object)".
• Predicate
L’interface "Predicate" représente une opération qui accepte un seul argument et renvoie un résultat de type "Boolean". La méthode abstraite de cette interface est "test(Object)".


Lambda Expression
Notes:
<!-- Slide number: 11 -->
Lambda ExpressionImplémentations des interfaces fonctionnelles
‹#›
• Comparator
L’interface "Comparator" est bien connue dans les anciennes versions du Java. C’est une fonction de comparaison, qui impose un ordre total sur certains objets de collection via sa méthode abstraite "compare(T o1, T o2)".

Lambda Expression
Notes:
<!-- Slide number: 12 -->
Lambda Expression: Implémentations des interfaces fonctionnelles
Publicité
‹#›
• UnaryOperator
Représente une opération sur un opérande unique qui produit un résultat du même type que son opérande. C’est une spécialisation de l’interface "Function" dans le cas où l'opérande et le résultat sont du même type. L’interface abstraite de cette interface est "apply(Object)".


Notes:
<!-- Slide number: 13 -->
Lambda Expression: Implémentations des interfaces fonctionnelles
‹#›
• BiFunction
Représente une fonction qui accepte deux arguments et produit un résultat. C’est la spécialisation de deux arités de l’interface "Function". La méthode abstraite de cette interface est "apply(T t, U u)".

Notes:
<!-- Slide number: 14 -->
Lambda Expression: Implémentations des interfaces fonctionnelles
‹#›
BinaryOperator
Représente une opération à deux opérandes de même type, qui produise un résultat du même type que les opérandes. C’est une spécialisation de l’interface "BiFunction" dans le cas où les opérandes et le résultat sont tous du même type.
