mutable reduction operation将输入元素累积到可变结果容器中,可选地在处理完所有输入元素后将累积结果转换为最终表示。 还原操作可以顺序执行或并行执行。可变还原操作的示例包括:将元素累积到 ; 使用连接字符串; 计算有关元素的摘要信息,例如总和,最小值,最大值或平均值; 计算“枢轴表”摘要,例如“卖方的最大价值交易”等。类提供了许多常见的可变减少的实现。
由四个函数指定,这四个函数一起工作以将条目累积到可变结果容器中,并且可选地对结果执行最终转换。 他们是:
- 创建新的结果容器( )
- 将新数据元素合并到结果容器中( )
- 将两个结果容器合并为一个( )
- 在容器上执行可选的最终转换( )
收集器还具有一组特征,例如 ,它们提供可以由缩减实现使用以提供更好性能的提示。
使用收集器顺序实现缩减将使用supplier函数创建单个结果容器,并为每个输入元素调用一次累加器函数。 并行实现将对输入进行分区,为每个分区创建结果容器,将每个分区的内容累积到该分区的子结果中,然后使用组合器函数将子结果合并为组合结果。
为确保顺序和并行执行产生相同的结果,收集器函数必须满足标识和associativity约束。
标识约束表示对于任何部分累积的结果,将其与空结果容器组合必须产生等效结果。 也就是说,对于部分累积结果 ,它是任何一系列累加器和组合器调用的结果, 必须等效于 。
关联约束表示拆分计算必须产生等效结果。 也就是说,对于任何输入元素和 ,以下计算中的结果和必须是等效的:
对于不具备收藏特征,两名积累的结果和是等价的,如果 。 对于无序收集器,放宽等价以允许与顺序差异相关的不相等。 (例如,向累积元素的无序收集器会考虑两个等效的列表,如果它们包含相同的元素,则忽略顺序。)
基于实现减少的 ,例如 ,必须遵守以下约束:
- 第一个参数传递给累加器函数,两个参数都传递给组合器函数,传递给整理器函数的参数必须是先前调用结果供应商,累加器或组合器函数的结果。
- 除了将它们再次传递给累加器,组合器或修整器功能,或者将它们返回到缩减操作的调用者之外,该实现不应对任何结果提供者,累加器或组合器函数的结果做任何事情。
- 如果结果传递给组合器或修整器功能,并且不从该功能返回相同的对象,则永远不会再次使用它。
- 一旦结果传递给组合器或修整器功能,它就不会再次传递给累加器功能。
- 对于非并发收集器,从结果提供者,累加器或组合器函数返回的任何结果必须是串行线程限制的。 这使得收集能够并行发生,而不需要实现任何其他同步。 减少实现必须管理输入被正确分区,分区是单独处理的,并且只有在累积完成后才进行组合。
- 对于并发收集器,实现可以(但不是必须)同时实现还原。 并发减少是使用相同的可同时修改的结果容器从多个线程同时调用累加器函数的减少,而不是在累积期间保持结果被隔离。 仅当收集器具有特征或原始数据无序时,才应应用并发减少。
除了中的预定义实现之外 ,静态工厂方法可用于构造收集器。 例如,您可以创建一个收集器,将小部件累积到中:
(此行为也由预定义收集器实现 )。到此这篇orecale数据库(orecol数据库菜鸟教程)的文章就介绍到这了,更多相关内容请继续浏览下面的相关推荐文章,希望大家都能在编程的领域有一番成就!
版权声明:
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若内容造成侵权、违法违规、事实不符,请将相关资料发送至xkadmin@xkablog.com进行投诉反馈,一经查实,立即处理!
转载请注明出处,原文链接:https://www.xkablog.com/sjkxydsj/17062.html