Java流乘法并返回乘法之和

标签 java java-stream bigdecimal

目前我正在使用 for 循环来执行简单的乘法并对获得的值求和:

BigDecimal serviceOrderTotal = new BigDecimal(0.00);
for (int i = 0; i < orderPresenter.getServiceList().size(); i++) {
    System.out.println("orderPresenter.getServiceList().get(i).getServiceValue()");
    System.out.println(orderPresenter.getServiceList().get(i).getServiceValue());
    System.out.println("orderPresenter.getServiceList().get(i).getServiceQuantity()");
    System.out.println(orderPresenter.getServiceList().get(i).getServiceQuantity());
    serviceOrderTotalold = serviceOrderTotal.add(orderPresenter.getServiceList().get(i).getServiceValue().multiply(orderPresenter.getServiceList().get(i).getServiceQuantity()));
}

我需要使用流来做同样的事情。对于每个 orderPresenter,我需要乘以数量值并返回这些值的总和。

如果我在 stream 中使用 forEach 来执行此操作,我无法返回该值,因为变量必须是 final 或原子变量在 forEach 内部使用。我最终没有成功:

BigDecimal serviceOrderTotal = new BigDecimal(0.00);
serviceOrderTotal = orderPresenter.getServiceList().stream()
               .forEach(servicePresenter -> {
                    System.out.println("orderPresenter.getServiceValue()");
                    System.out.println(orderPresenter.getServiceValue());
                    System.out.println("orderPresenter.getServiceQuantity()");
                    System.out.println(orderPresenter.getServiceQuantity());
                    serviceOrderTotalold = serviceOrderTotalold.add(orderPresenter.getServiceValue().multiply(orderPresenter.getServiceQuantity()));
                });

最佳答案

您可以修改您的实现以使用 foreach,例如:

BigDecimal serviceOrderTotal = BigDecimal.ZERO;
for (Service service : orderPresenter.getServiceList()) {
    serviceOrderTotal = serviceOrderTotal.add(service.getServiceValue().multiply(service.getServiceQuantity()));
}

这也可以使用 java-stream 的 mapreduce 操作进一步转换为:

BigDecimal serviceOrderTotal = orderPresenter.getServiceList().stream()
        .map(service -> service.getServiceValue().multiply(service.getServiceQuantity()))
        .reduce(BigDecimal.ZERO, BigDecimal::add);

关于Java流乘法并返回乘法之和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58940272/

相关文章:

java - 数据截断 : Incorrect datetime value

java - 在 Java 中将时间转换为 float ,反之亦然

java - 嵌套 map 上的流

java - 空安全比较具有0.0和0的两个十进制对象

java - 正确使用 BigDecimal

java - 当网格空间包含某些东西时捕捉

java - 如何将 "this, string format"变成两个 token ("this"和 "string format")

java - 如何使用 javax.mail 将消息作为附件添加到另一条消息上

映射后的Java流到数组

java - 如何从 CompletableFuture 中抛出自定义异常?