[英]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.