【发布时间】:2015-07-09 16:29:22
【问题描述】:
我创建了简单的演示:
public static void main(String[] args) {
List<String> list2 = Arrays.asList("adf", "bcd", "abc", "hgr", "jyt", "edr", "biu");
String collect = list2.stream().collect(String::new, (res, elem) -> {
res=res.concat(" ").concat(elem);
// System.out.printf("res=%s, elem=%s\n", res.isEmpty(), elem);
}, (res1, res2) -> {
System.out.printf("res1=%s, res2=%s\n", res1, res2);
});
System.out.println("collect=" + collect);
}
问题是BiConsumer combiner 的一部分collect 根本没有运行。
如果我使用parallelStream(),它会运行,但两个参数res1 和res2 等于供应商String::new。
如何使combiner 在collect 方法中工作?
【问题讨论】:
-
请注意,如果您想通过分隔符连接元素,请使用
.collect(Collectors.joining(" "));或String.join(" ", list2)(如果您有字符串列表)。 -
请注意,您的尝试更像是 reduce,因为您使用的是不可变的
Strings:list2.stream().reduce("", (res, elem) -> res.concat(" ").concat(elem))。不过,作为@Alexis C. pointed out,已经有更高效的内置解决方案了。
标签: java java-8 java-stream