我有一个函数,它创建一个int流,找到不同的字符,对它们进行排序,然后将它们收集到一个新的列表中,然后创建一个字符串.以下是功能.
public static String longest(String s1, String s2) {
String s = s1 + s2;
return s.chars()
.distinct()
.sorted()
.collect(StringBuilder::new, StringBuilder::appendCodePoint, StringBuilder::append)
.toString();
}
Run Code Online (Sandbox Code Playgroud)
我真的很难弄清楚StringBuilder的收集是如何工作的,我已经在线搜索了Java文档,但是对它没有任何意义.从我可以看出,它创建了一个StringBuilder的新实例,只是在流中附加每个字符,任何人都可以给出更好的解释吗?谢谢
JB *_*zet 12
要理解这三个参数,您需要了解流需要做什么:它遍历字符,并且必须将它们附加到StringBuilder.
所以它需要知道的第一件事是如何创建一个空的StringBuilder.这就是第一个参数的用途:它提供了一个函数,当由流调用时,它创建一个空的StringBuilder.
它需要知道的第二件事是如何处理流中的每个字符.它必须将它们附加到StringBuilder.这就是第二个参数的用途:它是一个函数,当由流调用时,将该字符附加到StringBuilder.
如果流是顺序的,那就是你所需要的.但是如果流是并行的,则流将元素分成几个部分,并且并行处理每个部分.让我们说它只使用两部分.它调用第一个函数两次来创建两个空StringBuilder,它通过使用第二个函数将字符附加到两个StringBuilder来并行处理每个部分.
最后,每个部分都转换为包含一半字符的StringBuilder.因此,流需要知道如何将这两个StringBuilder组合在一起.这就是第三个论点.它是一个函数,当由Stream调用时,通过将第二个字符串中的所有字符附加到第一个字符串,将两个StringBuilder组合在一起.
参数1:创建起始结果(在本例中为新的结果StringBuilder).
参数2:String向结果(StringBuilder)添加元素().
参数3:如果并行运行流,StringBuilders则将创建多个流.这是为了将这些组合在一起.
| 归档时间: |
|
| 查看次数: |
7322 次 |
| 最近记录: |