Java 我不理解使用流反转字符串的代码

Java 我不理解使用流反转字符串的代码,java,lambda,Java,Lambda,请解释以下代码使用流反转字符串: public static String reverse(String test) { return IntStream.range(0, test.length()) .map(i -> test.charAt(test.length() - i - 1)) .collect(StringBuilder::new, (sb, c) -> sb.append

请解释以下代码使用流反转字符串:

public static String reverse(String test) { 
    return IntStream.range(0, test.length()) 
                    .map(i -> test.charAt(test.length() - i - 1)) 
                    .collect(StringBuilder::new, (sb, c) -> sb.append((char) c), StringBuilder::append) 
                    .toString(); 
}

该方法可分为5个关键领域:

public static String reverse(String test) {
        return IntStream.range(0, test.length())
                .map(i -> test.charAt(test.length() - i - 1))
                .collect(StringBuilder::new, (sb, c) -> sb.append((char) c), StringBuilder::append)
                .toString();
    }
在第1行,字符串被传递到方法中,以相反的顺序返回。例如,字符串测试可以等于world

在第2行,一个数字流被传递到该流中,该数字流与传入的字符串一样长。如果test等于world,则数字流为0,1,2,3,4

在第3行,数字被映射到它们所在字符串后面的数字中。所以数字0被映射到test.length 5-i0-1的字符中。所以数字0在第4点被映射到字符中。这等于d。这是对所有其他数字进行的,因此0=d,1=l,2=r,3=o,4=w

在第4行,创建了一个新的Stringbuilder,每个字符都被添加到Stringbuilder中,这样它就可以添加d->l->r->o->w中的字符

最后在第5行,使用toString方法返回StringBuilder


结果,字符串世界颠倒了。

请查看我的编辑并修改它。你的问题不清楚。我的实际疑问是在第5行,为什么我们要在collect方法中追加两次。collect方法是将参数R collectSupplier supplier,ObjIntConsumer累加器,双消费组合第一个参数是要创建的可变对象StringBuilder第二个参数定义流字符中的每个对象将如何累积。每个字符都附加到StringBuilder实例中。最后,所有StringBuilder通过相互附加的方式进行组合。toString接受所有组合的StringBuilder并返回单个字符串