【发布时间】:2021-09-15 03:16:51
【问题描述】:
我最近在研究java函数接口,想知道方法引用在collect stream method上是如何工作的。
在 java 文档中,collect 方法获取 3 个参数:supplier、accumulator 和 combiner。
collect(
Supplier<R> supplier,
BiConsumer<R,? super T> accumulator,
BiConsumer<R,R> combiner
)
..这是示例代码。
List<String> asList = stringStream.collect(
ArrayList::new, // suplier?
ArrayList::add, // accumulator?
ArrayList::addAll // combiner?
);
所以,我的问题是:
-
参数类型
如您在上面的代码中所见,collect 方法接收 BiConsumer 接口作为累加器和组合器的参数。
但是,ArrayList::add 和 ArrayList::addAll 方法采用单个参数(不是“Bi”,而是“Unary”!)。
我想知道这段代码是怎么可能的。有什么隐藏的机制吗?
-
组合器的用途
我想知道combiner的目的是什么。
我了解 collect 方法使用供应商和累加器从现有集合创建可变集合。
但是很难理解在这个过程中哪里需要组合器。
【问题讨论】:
标签: java functional-programming java-stream collect