我最近在研究java函数接口,想知道方法引用是如何在收集流方法上工作的。
在java文档中,collect方法获得3个参数:supplier、acculator和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”,而是“一元”!)。
我想知道这个代码怎么可能。这有什么隐藏的机制吗?
合路器的用途
我想知道合路器的用途是什么。
我知道collect方法使用suplier和累加器从现有集合创建可变集合。
但很难理解在这个过程中需要组合器的地方。
1条答案
按热度按时间9q78igpj1#
对于非静态方法引用,对象(在您的示例中
ArrayList instance
)也作为参数传递。所以BiComsumer
将如图所示调用。他们都是这样称呼的。
印刷品
在合并器的情况下,仅当涉及并行流时,在不同线程中创建多个列表时,才使用合并器合并多个列表。