///////////// Functional Interface //////////// "A functional interface is an interface with exactly one abstract method. Examples: Runnable, Callable, Comparator, Consumer, Predicate, etc. Java provides the @FunctionalInterface annotation to mark an interface as functional. Java provides the java.util.function package, which contains common functional interfaces: Predicate → Takes T, returns boolean Consumer → Takes T, returns void Function → Takes T, returns R Supplier → Takes nothing, returns T" Comme ces interfaces fonctionnelles n'ont qu'une méthode, java offre des syntaxes raccourcies pour les définir : => classes anonymes => lambdas expressions (voir CodeInterfacesFonctionnelles.java) Où trouve-t-on ces interfaces fonctionnelles ? Vous connaissez déjà des exemples (ex définition d'un TreeSet, ou forEach de collection qui prend en paramètre un Consumer), mais il y a un exemple typique d'utilisation : les stream. /////////// Stream /////////// Stream est une interface java qui correspond à "A sequence of elements supporting sequential and parallel aggregate operations." Méthodes typiques de Stream : -Stream filter(Predicate predicate) -Stream map(Function mapper) -Collection toList() Usage typique, étant donné une collection c, on veut parcourir c est faire des opérations sur c pour calculer une nouvelle collection c' Collection c' = c.stream().filter(...).map(....).toList() (voir CodeStream.java) Utilisation des "method reference" : une "method reference" est une syntaxe raccourcie pour implémenter une interface fonctionnelle. (voir CodeStream.java)