【发布时间】:2014-07-21 18:22:17
【问题描述】:
我目前正在阅读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
等等?为什么这...不应该在每次迭代时返回所有值?
非常感谢任何帮助。
谢谢。
【问题讨论】:
标签: java java-8 binary-operators