我正在阅读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
,则返回N.P.E。这个参数是用来做什么的?
更新
为什么如果我在
parallelStream
上运行它,我会收到不同的结果?第一次运行:
returned StringBuilder length = 420
第二次运行:
returned StringBuilder length = 546
第三次运行:
returned StringBuilder length = 348
等等,为什么会这样 - 它不应该在每次迭代中返回所有值吗?