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.