Mar*_* An 1 javascript java reduce lodash java-stream
我总是对 reduce()的JavaDoc有点困惑。它调用初始值Identity。
当我阅读Lodash文档时,我更加困惑:
似乎条款颠倒了。标识不是初始值,而是每次迭代要调用的函数。并且累加器是初始值:
集合(数组|对象):要迭代的集合。
[iteratee=_.identity] (Function):每次迭代调用的函数。
[累加器] (*):初始值。
JavaScript 的文档Array.prototype.reduce()似乎更简单。它调用初始值:initialValue。
是否有调用 initialValue 的原因Identity以及为什么 Lodashreduce()和 Javareduce()有这种命名冲突?
Array.prototype.reduce()不支持并行处理,因此该值确实是单个初始值。
JavaStream.reduce()支持并行处理,因此该值可能会被多次使用,作为每个线程中的初始值,因此必须是中性的,例如加 0 或乘以 1。这样的中性值称为标识值。
正如维基百科所说:
在数学中,恒等元素或中性元素是集合中的一种特殊类型元素,该元素相对于该集合的二元运算,当与该集合组合时,该集合中的任何元素均保持不变。这个概念用于代数结构,例如群和环。术语同一性元件通常缩短到身份(如在添加剂身份和乘法单位的情况下),当不存在混淆的可能性,但身份隐含取决于与它相关联的二进制运算。