Bonjour,
j'essaie de comprendre quelque chose à la nouvelle programmation fonctionnelle à base de Stream et de lambdas introduite par Java 8.
Je tente de comprendre le livre de Richard Warburton Java 8 lambdas.
L'un des exemples donnés, chap 5, page 70 de la version française, exemple 15-19, est le suivant, il traite un stream issu d'une collection d'objets représentant des artistes, appelée... artists et il produit une chaîne contenant l'ensemble des noms de ces artistes.
Ma question est la suivante : à quoi diable sert donc le troisième argument de reduce, la lambda (left, right) -> left.append(right). Je ne vois pas du tout quel rôle
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 StringBuilder reduced = artists.stream() .map(Artist::getName() .reduce(new StringBuilder(), (builder,name) -> { if(builder.length >0) builder.append(", "); builder.append(name); return builder; }, (left,right) -> left.append(right)); reduced.insert(0,"["); reduced.append("]"); String result = reduced.toString();
elle joue vraiment.
Je pensais que la documentation Java m'éclairerait mais j'y vois ceci, qui ne m'éclaire pas davantage :
Quelqu'un voit-il quel est le rôle de ce troisième argument combiner dans le processus conduisant au résultat final ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 <U> U reduce(U identity, BiFunction<U,? super T,U> accumulator, BinaryOperator<U> combiner) Performs a reduction on the elements of this stream, using the provided identity, accumulation and combining functions. This is equivalent to: U result = identity; for (T element : this stream) result = accumulator.apply(result, element) return result;
Merci d'avance.
Partager