当前位置: 首页 > 面试题库 >

Java 8函数编程中“ reduce”函数的第三个参数的目的

沈华皓
2023-03-14
问题内容

在什么情况下Java 8流中会调用“ reduce”的第三个参数?

下面的代码尝试遍历字符串列表,并将每个字符串的第一个字符的代码点值相加。最终的lambda返回的值似乎从未使用过,并且,如果您插入println,则似乎永远不会调用它。该文档将其描述为“组合器”,但我找不到更多详细信息…

int result =
  data.stream().reduce(0, (total,s) -> total + s.codePointAt(0), (a,b) -> 1000000); 

问题答案:

您在说这个功能吗?

reduce <U> U reduce(U identity,
             BiFunction<U,? super T,U> accumulator,
             BinaryOperator<U> combiner) 

使用提供的标识,累积和组合功能,对此流的元素进行简化。这等效于:

 U result = identity;
 for (T element : this stream)
     result = accumulator.apply(result, element)
 return result;  
 ```

但不限于顺序执行。身份值必须是组合器功能的身份。这意味着对于所有u,combiner(identity,u)等于u。此外,组合器功能必须与累加器功能兼容;对于所有u和t,必须满足以下条件:

> 

combiner.apply(u, accumulator.apply(identity, t)) ==
accumulator.apply(u, t)
```

这是终端操作。

API注意:通过使用map和reduce操作的显式组合,可以更简单地表示使用这种形式的许多归约。累加器功能充当映射器和累加器的融合,有时比单独的映射和归约方法更有效,例如,当知道先前的降低值可以避免进行某些计算时。类型参数:U-结果的类型参数:identity-组合器函数累加器的标识值-关联,无干扰,无状态的功能,用于将附加元素合并到结果组合器中-关联,无干扰,无状态用于合并两个值的函数,这些值必须与累加器函数兼容返回:约简的结果另请参见:reduce(BinaryOperator),reduce(Object,BinaryOperator)

我以为它的目的是允许并行计算,所以我的猜测是只有在并行执行归约时才使用它。如果按顺序执行,则无需使用combiner。我不确定这一点-我只是基于文档注释“ […]不受顺序执行约束”以及注释中许多其他有关“并行执行”的说法。



 类似资料:
  • map/reduce/filter 是 Python 中较为常用的内建高阶函数,它们为函数式编程提供了不少便利。 map map 函数的使用形式如下: map(function, sequence) 解释:对 sequence 中的 item 依次执行 function(item),并将结果组成一个 List 返回,也就是: [function(item1), function(item2), f

  • 本文向大家介绍Python中的map()函数和reduce()函数的用法,包括了Python中的map()函数和reduce()函数的用法的使用技巧和注意事项,需要的朋友参考一下 Python内建了map()和reduce()函数。 如果你读过Google的那篇大名鼎鼎的论文“MapReduce: Simplified Data Processing on Large Clusters”,你就能大

  • 问题内容: 如标题所示,我需要知道方法参数中是否存在与java对应的语法,例如 (代码由维基百科提供) 问题答案: 是的,您可以这样写:

  • 本章主题 ♦ 什么是函数 ♦ 调用函数 ♦ 创建函数 ♦ 条件表达式 ♦ 传入函数 ♦ 形参 ♦ 变长参数 ♦ 函数式编程 ♦ 变量的作用域 ♦ 递归 ♦ 生成器 在第2章,我们引入了函数,并介绍了函数的创建和调用。这一章,我们将在前面内容的基础上,详细的讲解函数的方方面面。除了预期特性之外,Python中的函数还支持多种调用方式以及参数类型并实现了一些函数式编程接口。最后我们将以对Python变

  • 本文向大家介绍PowerShell函数中把参数传入另一个函数的函数传参例子,包括了PowerShell函数中把参数传入另一个函数的函数传参例子的使用技巧和注意事项,需要的朋友参考一下 本文介绍在自定义PowerShell函数时,可以使用@PSBoundParameters来将参数传递给另一函数。 下面,我们来创建一个Get-BIOS的函数, 在这个函数中,我们并没有作任何实际的操作,只是将输入的参

  • 按值传递 Lua 函数的参数大部分是按值传递的。值传递就是调用函数时,实参把它的值通过赋值运算传递给形参,然后形参的改变和实参就没有关系了。在这个过程中,实参是通过它在参数表中的位置与形参匹配起来的。 示例代码: local function swap(a, b) --定义函数swap,函数内部进行交换两个变量的值 local temp = a a = b b = temp