Et vive le cycle en V
Un résumé d'une bonne partie des lambas (Consumer, BiFunction, Function, Predicate) et des pointeurs sur fonctions.
Toujours sur les tutos en Java 8 je vais essayer de vous expliquer les mapper et la méthode .map de l'API Stream.
Définition 'Mapper' :
Objet ou fonction permettant de convertir un élément en un autre élément.
Exemple :
J'ai une liste de String :
List<String> list = ...;
Que je souhaite convertir en ceci :
List<Integer> sizes; // qui contient la taille de chacune des String de la liste précédente.
En vieux Java j'écrirais :
private List<Integer> convert(List<String> strList) {
List<Integer> result = new ArrayList<>(list.size());
for (String str : strList) {
result.add(str.size());
}
return result;
}
En lambda j'écrirai :
private List<Integer> convert(List<String> strList) {
return strList.stream().map(str -> str.size()).toList();
}
Et votre mapper c'est cette petite lamdba 'str -> str.size()' qui sera appliquée à chaque élément de la liste un par un.
Je poursuis ma migration vers le fonctionnel sur Java 8 avec un petit tuto sur les stream et les map-reduce. Le tout est guidé par une multitude de petits exemples simples.
Je découvre le blog de Jean-Christophe Gay. Très sympa et assez complet sur Java 8.
Attention : si vous ne vous êtes toujours pas mis aux lambdas, aux Clojures et aux Predicats, vous allez avoir du mal à vous revendre dans l'univers Java. Début 2016, cela deviendra indispensable !
P.S : vous savez que je déteste la programmation fonctionnelle car l'inférence de type permet de produire bien trop souvent un code immaintenable, cependant, utilisée avec BEAUCOUP de parcimonie, elle permet de factoriser énormément de code technique et éviter les doublons. Bref, je m'y suis mise, ce n'est pas pour rien.