我目前正在阅读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
等等?这是为什么...不应该在每次迭代时返回所有值?
任何帮助都非常感谢。
谢谢。