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 : 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();
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 : 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;
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.