我正在学习泛型、功能接口、lambda表达式和聚合操作。虽然我单独理解这些技术,但我很难对它们进行整体概念化,即它们是如何协同工作的。
使用Java中题为:接口收集器(T,A,R)的示例
Collector(Widget,?,TreeSet(Widget)) into = Collector.of(TreeSet::new, TreeSet::add, (left,right)->{left.addAll(right); return left;});上述javadoc中的上述方法具有以下行为参数:
Supplier(A) supplier,
BiConsumer(A,T) accumulator,
BiConsumer(A) combiner上述示例中提供的供应商使用方法引用:TreeSet::new。
作为结果的提供者的TreeSet::new与组合器的accumulator?..to之间的关系是什么?
这是怎么回事,我不明白这是怎么一家供应商!?
任何有关这一广泛主题的文件链接都会有很大的价值。谢谢你的耐心。
发布于 2016-02-20 13:49:52
直接从Java文档引号
供应商:
创建并返回新的可变结果容器的函数。
TreeSet::new只是对TreeSet的构造函数的调用,它返回TreeSet的一个实例。从这个意义上说,它是TreeSets的供应商。
在此上下文中称为累加器的BiConsumer表示
将值折叠成可变结果容器的函数。
它将向类型A的对象提供T类型的对象。通常,您只需调用集合的一些add方法,但在定义自定义收集器时也可以在这里进行一些预处理。
最后,BiConsumer被描述为:
接受两个部分结果并将它们合并的函数。
当一个进程在并行和部分结果中执行时(在这个上下文中,只包含元素子集的TreeSet对象)需要组合到最终的TreeSet结果中时,就需要使用它。这通常是一个addAll方法。
因此,通过提供这些必要的成分,您可以构建您自己的收集机制。
https://stackoverflow.com/questions/35523921
复制相似问题