2 回答
TA贡献1829条经验 获得超13个赞
由于 String 是一个不可变对象,可变归约在这里如何工作?
它没有。当您运行它时,您将获得一个空字符串( 的结果Supplier only)。编译器不能强制检查供应商是否返回不可变对象,这绝对是它不能做的事情。由于你的容器是不可变的,对它的更新会被简单地忽略。这就像做:
String s = "abc";
s.concat("def"); // the result is ignored here
可能如果你把它写成一个 lambda,它会更有意义:
Stream<String> stream1 = Stream.of("w", "o", "l", "f");
String word = stream1.collect(
String::new,
(left, right) -> {
left.concat(right); // result is ignored
},
String::concat);
另一方面,当你使用 reduce 时,你会被迫返回一些东西:
String word = stream1.reduce(
"",
(x, y) -> {
return x.concat(y);
},
(x, y) -> {
return x.concat(y);
});
当然,你仍然可以这样做:
String word = stream1.reduce(
"",
(x, y) -> {
x.concat(y);
return x; // kind of stupid, but you could
},
(x, y) -> {
return x.concat(y);
});
如果你想打破它;但这不是重点。
添加回答
举报