当前位置: 首页 > 知识库问答 >
问题:

为什么标识值必须是流中组合器函数的标识。减少

屠振濂
2023-03-14

我正在学习Java 8,在Java的归约运算部分。util。stream的包摘要,它说:

更正式地说,标识值必须是组合器函数的标识。这意味着对于所有u,组合器。应用(恒等式,u)等于u。此外,组合器函数必须是关联的,并且必须与累加器函数兼容:对于所有u和t,组合器。应用(u,累加器。应用(恒等式,t))必须等于累加器()。应用(u,t)。

我不明白为什么身份值必须是组合器函数的身份。我认为“组合器函数必须是关联的并且必须是兼容的”足以产生相同的结果,无论流是串行的还是并行的。

例如,我有一个流,它有四个元素:e1、e2、e3、e4。如果它是一个串行流,则结果是acidentityace1ace2ace3ace4(ac表示累加器功能)。如果这是一个并行流,那么这四个元素可以分为两部分,[e1,e2][e3,e4],因此结果是(identityace1ace2)co(identityace3ace4)。

如果给定“组合器函数是关联的并且与累加器函数兼容”,我们可以推断“identityace1ace2ace3ace4”等于“(identityace1ace2)co(identityace3acace4):

identity ac e1 ac e2 ac e3 ac e4
= (identity ac e1 ac e2 ac e3) co (identity ac e4) // because of compatibility
= (identity ac e1 ac e2) co (identity ac e3) co (identity ac e4) // because of compatibility
= (identity ac e1 ac e2) co ((identity ac e3) co (identity ac e4)) // because of associative property
= (identity ac e1 ac e2) co ((identity ac e3) ac e4) // because of compatibility
= (identity ac e1 ac e2) co (identity ac e3 ac e4)

那么,为什么标识值必须是组合器函数的标识?

相关问题:

  • java-Stream reduce()需求究竟需要什么堆栈溢出

共有1个答案

高钱青
2023-03-14

我不理解为什么标识值必须是组合器函数的标识。

必须这样,否则,如果提供的流为空,则无法生成结果。但用恒等式归约的结果不是可选的。您可以在不使用标识的情况下定义Java 8精简:

java prettyprint-override">OptionalInt sum = Arrays.stream(new int[] { 0, 2, 6 }).reduce((a, b) -> a + b);

但是,如果您这样做,空流将不会返回有效结果,因为还原操作不“知道”0是您定义的“sum”操作的中性元素。Im数学术语,您正在定义操作的标识元素,以便在操作根本不适用的情况下进行回退。直观地,您可以这样描述操作:

减少=op(单位,a,b,c…)

这就是为什么您会收到OptionalInt,这意味着可能没有计算出整数值。

对于乘法,恒等式为1;对于和,恒等式为0。由于恒等式必须为中性,因此从最严格的意义上讲,它不是回退,因为回退可以是任何值,包括-1或任何其他值(不得为数字值)。因此Optionant提供了一个很好的替代方案,因为有了optional,您可以应用或(fallback)方法,该方法不需要是约简的中性元素。

 类似资料:
  • 我已经升级到Xcode 7,突然我的一个目标无法使用“宏名称必须是标识符”消息构建。此目标的调试配置构建正常,我可以在设备上运行它,但发布配置不会构建。 错误指向目标的.pch文件,但对于许多其他目标(包括已发布的目标),相同的.pch文件构建正常。 以下是错误消息: 这是。pch文件: 我已经尝试过清理和Xcode重启。 我将非常感谢任何关于如何深入挖掘并找到问题所在的建议。

  • 我仔细检查配置的存储帐户中是否有一个容器: 我没有改变其他任何东西。下面是 run.csx: 当我按下运行按钮时,出现以下错误: 2017-05-12T13:47:35.567 执行函数时出现异常:Functions.BlobTriggerCSharp1.Microsoft.Azure.WebJobs.Host:发生一个或多个错误。异常绑定参数“myBlob”。Microsoft.Azure.We

  • 我正在使用SODA for Java存储和检索Oracle12c DB中的文档。我正在效仿这个例子。 这一例外背后的原因将是什么?

  • 我尝试用Axon配置cqrs和事件源。SeatReseveCreateCommand工作正常。但是SeatReserveUpadateCommand工作不正确。 这是我的SeatReserve集合 这是我的控制器 更新导致此错误 我怎么解决这个。

  • 问题内容: 在阅读Hibernate文档时,我不断看到对 自然标识符 概念的引用。 这是否仅表示实体因其拥有的数据的性质而具有的ID? 例如,用户名+密码+年龄+某些内容用作复合标识符? 问题答案: 在Hibernate中,自然键通常用于查找。在大多数情况下,您将拥有一个自动生成的代理ID。但是,此ID对于查找而言毫无用处,因为您将始终通过名称,社会保险号或其他来自现实世界的字段进行查询。 在使用