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

在还原操作中从不调用合并器(但它是强制性的)

柳镜
2023-03-14
    List<User> users = Arrays.asList(new User("John", 30), new User("Julie", 35));

    int result = users.stream()
            .reduce(0,
                    (partialAgeResult, user) -> {
                        // accumulator is called twice
                        System.out.println(MessageFormat.format("partialAgeResult {0}, user {1}", partialAgeResult, user));
                        return partialAgeResult + user.getAge();
                    },
                    (integer, integer2) -> {
                        // combiner is never called
                        System.out.println(MessageFormat.format("integer {0}, integer2 {1}", integer, integer2));
                        return integer * integer2;
                    });

    System.out.println(MessageFormat.format("Result is {0}", result)); 

共有1个答案

胥智
2023-03-14

问题就在这里。您在合并器中是乘法而不是加法。

 (integer, integer2) -> {
                        // combiner is never called
                        System.out.println(MessageFormat.format("integer {0}, integer2 {1}", integer, integer2));
                        return integer * integer2; //<----- Should be addition
                    });

组合器用于适当地组合并行操作的各个部分,因为这些操作可以在原始流的各个“部分”上独立执行。

一个简单的例子是求和一个元素列表。在并行操作中可以有多种部分和,因此您需要在合并器中对部分和求和以得到总和(这是一个很好的练习,您可以亲自尝试查看)。

 类似资料:
  • 4.6.6 强制属性操作符 在程序中,我们有时需要对同一个存储单元以不同的属性来访问,或对一些不确定的存储属性需要显式指定等,这时,我们就需要强制属性操作符PTR。该操作符的作用有点象C语言中的类型强制方法。 对于指令:MOV [BX], 1H,其目标操作数[BX]是寄存器间接寻址方式,它指向一个存储单元。在作传送操作时,是把“1H”扩展成8位作字节传送,还是扩展成16位作字传送呢?这就使该指令具

  • 我有以下内容(使用org.json.simple): 问题是在我调用map将流元素转换为之后,在下一次调用map时,元素仍然是,而不是。不确定我在这里做错了什么? 相关:是否可以在Java 8中强制转换流?

  • 说我有以下几点: 并且在该操作创建器中,我想访问全局存储状态(所有还原器)。这样做是否更好: 或者这个:

  • 问题内容: 我正在将数据从javascript应用程序发送到MVC5控制器,但是,当数据提交到Submit controller操作时,它永远不会被调用。我有一些非常简单的映射器,它们创建以下JSON对象: 然后,我使用以下代码发送数据: 我的控制器代码如下: 我有以下问题: 但是,从不会调用Submit,但是,如果我注释掉了控制器参数,那么它将被调用,这是为什么呢? 从上面看来,控制器框架似乎无

  • 我想检查一个数字是二进制还是十进制,但从1到n都不行。例如,从1到10我们有两个十进制数字,其中包含0,1。我如何更改它?

  • 然而,如果我省略了调用,我的应用程序似乎运行良好,没有任何明显的错误。这个方法是否只是为了加快速度,预计一个可能很长的初始化,这样它就不会在第一次使用时减慢你的速度(急切的和懒惰的初始化)?或者,如果我没有正确初始化ThreeTenABP,是否会冒得到错误结果的风险?