繁体   English   中英

Java Stream 收集方法

[英]Java Stream collect method

当使用 String::new 作为 collect 方法的供应商时,我看到输出没有被收集并且最后没有返回任何内容。

如果使用 StringBuilder,则工作正常。

为什么 String::new 不能收集?

List<String> list2 = Arrays.asList("a", "b", "c", "d", "e", "f", "g");

String collect = list2.stream().collect(String::new, (res, elem) -> {
    res = res.concat(elem);
    System.out.printf("res=%s, elem=%s\n", res, elem);
}, (res1, res2) -> {
    System.out.printf("res1=%s, res2=%s\n", res1, res2);
});
System.out.println("collect=" + collect);

输出:

res=a, elem=a  
res=b, elem=b  
res=c, elem=c  
res=d, elem=d  
res=e, elem=e  
res=f, elem=f  
res=g, elem=g  
collect=

字符串是不可变的。 collect 方法的第二个参数是BiConsumer<R, ? super T> var2 BiConsumer<R, ? super T> var2并且不会返回任何东西来collect 这个简单的代码片段会有所帮助。

String collect = "hello";
collect.concat("world");
System.out.println(collect);

输出: hello而不是helloworld

要实现连接,使用可以使用collect(Collectors.joining(",")

希望这可以帮助!

collect 方法的第二个和第三个参数是消费者:为了有用地使用,你需要能够改变参数。

你不能用 String 来做这件事,因为它是不可变的。 您只是重新分配 lambda 参数。

改用joining收集器。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM