gpt4 book ai didi

Java流乘法并返回乘法之和

转载 作者:行者123 更新时间:2023-12-03 02:15:59 25 4
gpt4 key购买 nike

目前我正在使用 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com