Java 8, streams et reduce à trois arguments
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.
Code:
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(); |
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
elle joue vraiment.
Je pensais que la documentation Java m'éclairerait mais j'y vois ceci, qui ne m'éclaire pas davantage :
Code:
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; |
Quelqu'un voit-il quel est le rôle de ce troisième argument combiner dans le processus conduisant au résultat final ?
Merci d'avance.