gpt4 book ai didi

java - 流的收集函数中组合器有什么用?

转载 作者:行者123 更新时间:2023-11-30 01:48:18 25 4
gpt4 key购买 nike

在jdk8中,Stream提供collect函数 supplier , accumulatorcombiner

<R> R collect(Supplier<R> supplier,BiConsumer<R, ? super T> accumulator,BiConsumer<R, R> combiner);

我在注释中看到了将字符串流转换为字符串的示例,但我很困惑函数签名中的组合器的用途。我认为在累加器中,新元素已添加到结果容器中?

我尝试给组合器一个空值,但出现空指针异常。

 Stream<String> stringStream = Stream.of("hello", "world", "morning");
String string = stringStream.collect(StringBuilder::new,
StringBuilder::append, StringBuilder::append).toString();
System.out.println(string);

最佳答案

组合器:组合器以并行处理方式工作,组合与累加器兼容的两个值

collect(Supplier supplier, BiConsumer accumulator, BiConsumer combiner)

供应商:它创建一个新的结果容器,该容器将由累加器和组合器填充,最后将由collect()方法返回。在并行处理中,Supplier 函数将被多次调用,每次都会返回新值。

累加器:它将附加元素合并到结果中。

组合器:它组合了必须与累加器兼容的两个值。组合器以并行处理方式工作。

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 

关于java - 流的收集函数中组合器有什么用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57024255/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com