首先,由于没有要合并的内容,因此不需要在非并行流中执行合并器。
其次,您的问题源于使用
String::new和
String.concat。应该使用累加器通过将第二个参数与第一个参数结合来修改第一个参数,但是由于Java中的字符串是不可变的,因此您的代码不会产生任何结果。
res=res.concat(" ").concat(elem);将创建一个新字符串,然后将其丢弃。您想改用StringBuilder,以便保留中间结果:
public static void main(String[] args) { List<String> list2 = Arrays.asList("adf", "bcd", "abc", "hgr", "jyt", "edr", "biu"); String collect = list2.stream().collect(StringBuilder::new, (res, elem) -> { res.append(" ").append(elem); }, (res1, res2) -> { res1.append(res2.toString()); System.out.printf("res1=%s, res2=%sn", res1, res2); }).toString(); System.out.println("collect=" + collect);}这也可以与并行流一起正常工作
res1 = hgr jyt,res2 = jyt
res1 = bcd abc,res2 = abc
res1 = adf bcd abc,res2 = bcd abc
res1 = edr biu,res2 = biu
res1 = hgr jyt edr biu,res2 = edr biu
res1 = adf bcd abc hgr jyt edr biu,res2 = hgr jyt edr biu
collect = adf bcd abc hgr jyt edr biu



