我试图了解减少累加器的操作:在下面的例子中
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 次 |
最近记录: |