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

Java8streams.reduce()与组合器

东门城
2023-03-14
Map<String, String> environmentMap = new HashMap<>();

Function<String, String> replaceFunction = environmentMap.entrySet()
.stream()
.reduce
(Function.identity(),
(function,entrySet) -> stringToReplace -> function.apply(stringToReplace.replaceAll(entrySet.getKey(),entrySet.getValue(),
Function::andThen);

不知何故,我对replaceFunction部分感到困惑,但让我根据我的理解分解它。

  1. environmentMap.entrySet().stream()将创建条目 .
  2. 的流
  3. 我正在使用的reduce()方法接受标识、累加器和组合器。
  4. 因为我没有使用并行流,所以我想省略合并器,但是编译器抛出了一个错误。有什么方法可以将这个累加器转换成binaryoperator
  5. Function.identity()将始终返回一个返回输入参数的函数。在这种情况下,类型为string
  6. 第二个论点是我搞不懂的东西之一。(function,entrySet)->stringToReplace->function.apply(stringToReplace.ReplaceAll(entrySet.getkey(),entrySet.getvalue().
  7. function::andthen在此过程中做什么?
  8. 最后,bifunction 中的返回类型函数 来自哪里??

共有1个答案

卫甫
2023-03-14
Function<String, String> replaceFunction = environmentMap.entrySet()
            .stream()
            .reduce(Function.identity(),
                    (function,entrySet) -> stringToReplace -> function.apply(stringToReplace.replaceAll(entrySet.getKey(),entrySet.getValue())),
                            Function::andThen);

>

  • environmentMap.entrySet().stream()将创建条目 .
  • 的流
  • 我正在使用的reduce()方法接受标识、累加器和comminer.item。

    在此之前,您是正确的,但标识、累加器和组合器将按以下方式解析:

    >

  • identity-function.identity()解析为function .
  • 累加器-(function,entrySet)->stringToReplace->function.apply(stringToReplace.replaceAll(entrySet.getkey(),entrySet.getvalue()))

    `stringToReplace -> function.apply(stringToReplace.replaceAll(entrySet.getKey(),entrySet.getValue()))` 
    

    获取解析为函数

    所以整个累加器被解析为

    `BiFunction<Function<String,String>, Entry<String,String>,Function<String,String>`
    

    组合器-function::,然后解析为BinaryOperator ,函数 >

  •  类似资料:
    • 我在读一篇关于OOP中的关系、关联、组合、聚合等的文章。有些事情令人困惑 因此,在PHP中,我们调用以下代码组合 在阅读了几篇关于作文的文章后 以下是组成示例: 因此,根据我的理解,聚合意味着A类的对象可以存在于B类之外,而组合意味着A类生命周期的对象取决于B类。 我正确理解了吗?

    • 基本上,我有一组顶点ID,我想遍历并从某些外边找到一组顶点。我想把外边后面的顶点与它来自的准确性联系起来。例如:,所以v1有2个输出边(e1和e2)到v2和v4,而v3有2个输出边(e3和e4)到v5和v6。我想要的是得到如下所示的遍历结果 有人能帮我使用Gremlin遍历吗?最接近的例子是

    • 问题内容: 我试图理解这些术语的含义。我举了一些例子,例如: 汇总:Facebook 有一个 用户 组成:facebook 中的 每个用户 都有一个 会话。 协会:人们 使用 浏览器 但是我对 具有 和 使用我的 示例感到困惑。为什么不能是用户 使用 Facebook帐户或Facebook 使用 会话来认证用户? 就OOP而言,这是错误的吗?我在哪里想念这个概念? 问题答案: 该 使用 关系意味着

    • 我试图找出结合纯EJB web服务处理httpsession的最佳方法。我已经创建了一个实用程序类,我有一个控制器类。在controller类中实例化实用程序类的最佳位置是哪里?计划是每个访问/调用webservice(即第一次使用网站)的用户都应该为他们分配一个httpsession对象: 我已经学习了本教程http://docs.oracle.com/cd/e12839_01/web.1111

    • 4.3 嵌套组合与扩展 VimL 虽然只提供了列表与字典两种数据结构,但通过列表与字典的合理组合,几乎能表 达任意复杂的数据结构。这与许多其他流行的脚本语言(如 python)的思想如出一辙。 本节就讨论在 VimL 中如何用列表与字典表示常用数据结构。 堆栈与队列 堆栈是所谓先进后出的结构,队列是先进先出的结构。这可以直接用一个 list 表示, 因为 list 相当于个动态数组,支持随意在两端

    • 这是一道样题!千万不要在生产中这样做。在单独的容器中运行NGINX/PHP/OTHER服务! 和: