Сейчас я читаю O'reilly
Java 8 Lambdas — действительно хорошую книгу. я столкнулся с таким примером.
у меня есть
private final BiFunction<StringBuilder,String,StringBuilder>accumulator=
(builder,name)->{if(builder.length()>0)builder.append(",");builder.append("Mister:").append(name);return builder;};
final Stream<String>stringStream = Stream.of("John Lennon","Paul Mccartney"
,"George Harrison","Ringo Starr");
final StringBuilder reduce = stringStream
.filter(a->a!=null)
.reduce(new StringBuilder(),accumulator,(left,right)->left.append(right));
System.out.println(reduce);
System.out.println(reduce.length());
это дает правильный результат.
Mister:John Lennon,Mister:Paul Mccartney,Mister:George Harrison,Mister:Ringo Starr
мой вопрос касается метода reduce
, последний параметр которого является BinaryOperator
мой вопрос, для чего используется этот параметр? если я изменю на
.reduce(new StringBuilder(),accumulator,(left,right)->new StringBuilder());
вывод будет таким же, если я передам NULL
, тогда будет возвращен NPE.
для чего используется этот параметр?
ОБНОВЛЕНИЕ
почему, если я запускаю его на parallelStream
, я получаю разные результаты?
первый забег.
returned StringBuilder length = 420
второй запуск
returned StringBuilder length = 546
третий запуск
returned StringBuilder length = 348
и так далее? почему это... не должно возвращать все значения на каждой итерации?
любая помощь очень благодарна.
Благодарю.