我创建了一个简单的演示:
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);
}
问题在于collect
中的BiConsumer combiner
部分根本不运行。如果我使用
parallelStream()
,它会运行,但是两个参数res1
和res2
等于供应商String::new
。如何使
collect
方法中的combiner
工作?
.collect(Collectors.joining(" "))
,或者如果你有一个字符串列表,则使用String.join(" ", list2)
。 - Alexis C.String
不可变对象 合并 起来:list2.stream().reduce("", (res, elem) -> res.concat(" ").concat(elem))
。但是,正如 @Alexis C. 指出的那样,Java 8 中已经有更有效率的内置解决方案。 - Holger