我试图了解减少累加器的操作:在下面的例子中
List<String> letters = Arrays.asList("a","bb","ccc");
String result123 = letters
.stream()
.reduce((partialString, element) ->
partialString.length() < element.length()
? partialString
: element
).get();
System.out.println(result123);
Run Code Online (Sandbox Code Playgroud)
partialString 是否初始化为空字符串?由于它是一个折叠操作,我认为该操作应该导致空字符串但它的打印"a". 有人可以解释一下这个累加器是如何工作的吗?
的for-loop用于相应的代码reduce操作是类似
boolean seen = false;
String acc = null;
for (String letter : letters) {
if (!seen) {
seen = true;
acc = letter;
} else {
acc = acc.length() < letter.length() ? acc : letter;
}
}
Run Code Online (Sandbox Code Playgroud)
要减少的第一对元素是(firstElt, secondElt),没有空的初始元素
如果您打印每一步 reduce
letters.stream()
.reduce((partialString, element) -> {
System.out.println(partialString + " " + element);
return partialString.length() < element.length() ? partialString : element;
}).get();
// output
a bb
a ccc
Run Code Online (Sandbox Code Playgroud)
如果您阅读文档,即 的 javadoc reduce(),您将了解到它partialString被初始化为第一个值,并且reduce()仅被调用来组合值,也就是减少它们。
是否
partialString初始化为空字符串?
不。如果你想要,你需要使用另 reduce()一种方法,所以你不需要调用get():
String result123 = letters
.stream()
.reduce("", (partialString, element) ->
partialString.length() < element.length()
? partialString
: element
);
Run Code Online (Sandbox Code Playgroud)
当然,这没有任何意义,因为partialString现在总是一个带有 的字符串length() = 0,所以表达式的结果总是一个空字符串。您不妨编写String result123 = "";并保存所有 CPU 时间。
| 归档时间: |
|
| 查看次数: |
123 次 |
| 最近记录: |