首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java:聚合操作

Java:聚合操作
EN

Stack Overflow用户
提问于 2016-02-20 13:28:26
回答 1查看 255关注 0票数 0

我正在学习泛型、功能接口、lambda表达式和聚合操作。虽然我单独理解这些技术,但我很难对它们进行整体概念化,即它们是如何协同工作的。

使用Java中题为:接口收集器(T,A,R)的示例

代码语言:javascript
复制
Collector(Widget,?,TreeSet(Widget)) into = Collector.of(TreeSet::new, TreeSet::add, (left,right)->{left.addAll(right); return left;});

上述javadoc中的上述方法具有以下行为参数:

代码语言:javascript
复制
Supplier(A) supplier,
BiConsumer(A,T) accumulator,
BiConsumer(A) combiner

上述示例中提供的供应商使用方法引用:TreeSet::new

作为结果的提供者的TreeSet::new与组合器的accumulator?..to之间的关系是什么?

这是怎么回事,我不明白这是怎么一家供应商!?

任何有关这一广泛主题的文件链接都会有很大的价值。谢谢你的耐心。

EN

回答 1

Stack Overflow用户

发布于 2016-02-20 13:49:52

直接从Java文档引号

供应商:

创建并返回新的可变结果容器的函数。

TreeSet::new只是对TreeSet的构造函数的调用,它返回TreeSet的一个实例。从这个意义上说,它是TreeSets的供应商。

在此上下文中称为累加器的BiConsumer表示

将值折叠成可变结果容器的函数。

它将向类型A的对象提供T类型的对象。通常,您只需调用集合的一些add方法,但在定义自定义收集器时也可以在这里进行一些预处理。

最后,BiConsumer被描述为:

接受两个部分结果并将它们合并的函数。

当一个进程在并行和部分结果中执行时(在这个上下文中,只包含元素子集的TreeSet对象)需要组合到最终的TreeSet结果中时,就需要使用它。这通常是一个addAll方法。

因此,通过提供这些必要的成分,您可以构建您自己的收集机制。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35523921

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档