Collector.toList()
将为您返回一个空列表。
下面是实现:
public static <T>
Collector<T, ?, List<T>> toList() {
return new CollectorImpl<>((Supplier<List<T>>) ArrayList::new, List::add,
(left, right) -> { left.addAll(right); return left; },
CH_ID);
}
如您所见,它被用作物品的容器。ArrayList::new
来自 Collector 的 JavaDoc:
一种可变约简操作,它将输入元素累积到可变结果容器中,可以选择在处理完所有输入元素后将累积的结果转换为最终表示形式。缩减操作可以按顺序执行,也可以并行执行。
收集器由四个函数指定,这四个函数协同工作以将条目累积到可变结果容器中,并可选择对结果执行最终转换。它们是:
创建新的结果容器(供应商())
将新的数据元素合并到结果容器中(累加器())
- 将两个结果容器合并为一个(combiner())
- 在容器上执行可选的最终转换(finisher())
和
使用收集器按顺序实现缩减将使用 supplier 函数创建单个结果容器,并为每个输入元素调用一次累加器函数。并行实现将对输入进行分区,为每个分区创建一个结果容器,将每个分区的内容累积到该分区的子结果中,然后使用组合器函数将子结果合并为组合结果。
所以只要你不做一些奇怪的事情,比如组合函数返回,总是至少返回一个使用你提供的函数。null
Collector
mutable container
supplier
我认为如果一个实现会返回容器,这是非常违反直觉的。null