Java 8 Flashcards
C’est quoi les streams?
- une nouvelle façon de gérer les collections
- un stream ne stocke pas les données
- un stream transféré d’une source vers une suite d’opération (exemple pipe sur unix)
- un stream peut ne pas être borné
- un stream n’est pas réutilisable
- le chargement des données se fait de manière lazy
- Les stream peuvent être parallélisés
Combien y a-t-il de types d’opération qu’on peut réaliser sur un stream?
Deux : les opérations intermédiaire et les opérations terminales.
Donner un exemple d’opération intermédiaire sur un stream
Stream.map, Stream.filter
Donner des exemples d’opération terminales
Stream.reduce,Stream.collect
Quelles sont les nouveautés dans Java 8?
Les streams
Programmation fonctionnelle
Lambda
Méthode par défaut dans les interfaces
Comment peut-on créer un stream?
A partir des collections, qui fournit les méthodes : stream() et parallelStream
C’est quoi un lambda?
C’est une fonction (méthode) anonyme qui n’a pas de nom et qui peut être passée en argument d’une méthode.
Par contre, un lambda a un corps, un retour, et une liste d’exception qui peut être retourné
De quoi est former une expression lambda?
D’une liste de paramètre entre parenthèses, d’une flèche, et d’un corps.
(paramètres) -> expression; //expression : valeur retournée
ou
(paramètres) -> {expression;}
Où et quand utiliser les lambda?
Dans le contexte d’une interface fonctionnelle
Qu’est ce qu’une interface fonctionnelle?
C’est une interface qui ne spécifie qu’une et une seule méthode abstraite et utiliser pour typer une expression lambda
Example : Runnable, Comparator, Callable
Exemple dans Java 8 : Predicate, Consumer, Function
@FunctionlInterface
C’est une annotation qui permet d’indiquer qu’une interface est une interface fonctionnelle.
Une erreur est remontée à la compilation si l’interface comporte plus d’une méthode abstraite.
Predicate
Cette interface définit une méthode abstraite nommée “test” qui accepte en argument un objet de type T et qui retourne une valeur booléenne.
@FunctionalInterface public interface Predicate{ boolean test(T t); }
Consumer
Cette interface définit une méthode abstraite nommée “accept” qui accepte en argument un objet de type T et qui retourne rien.
@FunctionalInterface public interface Consume{ void accept(T t); }
Function
Cette interface définit une méthode abstraite nommée “apply” qui accepte en argument un objet de type T et retourne un objet de type R.
Est-ce que les lambdas peuvent accéder à des variables locales?
Oui, mais à condition que ceux-ci soit déclarer final.
Qu’est-ce que le référencement de méthode?
La référence de méthode permet d’utiliser une méthode existant et de l’utiliser en paramètre d’une méthode comme un lambda.
Exemple : inventory.sort(comparing(Apple::getWeight));
La référence de méthode peut se faire sur une méthode statique, méthode d’instance de n’importe quel type, méthode d’instance d’un objet existant.
En Java 8, comment peut-on chaîner des comparateurs
La classe Comparator fournit une méthode “comparing” qui retourne les clé de comparaison.
Sur cet objet retourné, la méthode “reversed()” permet d’inverser le résultat.
Sur cet objet retourné, la méthode “thenComparing(Class:elementDeComparaison)” permet de chaîner un autre comparateur.
Il est également possible de composer une liste de comparateur via les méthode and et or.
Comment compose-t-on plusieurs expressions représentées par l’interface Function.
L’interface “Function” fournit deux méthodes “andThen” et “compose”.
andThen retourne une fonction qui peut être utilisé pour une autre fonction
compose permet d’avoir le résultat.
Permet de créer des suites de traitement de méthode.
Qu’est-ce que le target type dans une expression lambda?
C’est le type attendu
Par quel moyen peut-on exécuter plusieurs stream en parallèle?
via la méthode parallelStream
A quoi sert l’opération map ?
Applique une fonction sur les éléments. C’est une opération intermédiaire
Qu’est ce qu’une interface fonctionnelle?
Interface avec une seule méthode utilisée en tant que type d’une expression lambda
Quels sont les différents types d’interface fonctionnelle?
Predicate, Consumer,Function, Supplier, UnaryOperator,BinaryOperator
Qu’est ce qu’une expression lambda
Méthode sans nom qui permet de passer un comportement comme si c’était une donnée