在jdk8中,流提供collect
,supplier
和accumulator
的{{1}}函数
combiner
我看到注释中的示例,该示例将String Stream转换为String,但是我很困惑在函数签名中使用组合器。我认为在累加器中,新元素已添加到结果变量中?
我曾尝试为组合器提供一个空值,但出现了一个空指针异常。
<R> R collect(Supplier<R> supplier,BiConsumer<R, ? super T> accumulator,BiConsumer<R, R> combiner);
答案 0 :(得分:2)
Combiner:组合器在并行处理中工作,以将与累加器兼容的两个值组合在一起
collect(Supplier supplier, BiConsumer accumulator, BiConsumer combiner)
供应商::它将创建一个新的结果容器,该容器将由累加器和组合器填充,最后将由collect()
方法返回。在并行处理中,将多次调用Supplier函数,每次都会返回新值。
累加器::它将其他元素合并到结果中。
combiner::它合并了两个必须与累加器兼容的值。合并器在并行处理中工作。
List<String> list = Arrays.asList("Mukesh", "Vishal", "Amar");
String result = list.parallelStream().collect(StringBuilder::new,
(response, element) -> response.append(" ").append(element),
(response1, response2) -> response1.append(",").append(response2.toString()))
.toString();
System.out.println("Result: " + result);
输出:
Result: Mukesh, Vishal, Amar
如果我们使用list.stream()
,则输出将有所不同,因为它不是并行处理,因此没有任何组合。
输出:
Result: Mukesh Vishal Amar