Java 流乘法和 return 乘法和
Java stream multiply and return sum of multiplication
目前我正在使用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()));
}
我需要使用流来做同样的事情。对于每个 orderPresenters,我需要将数量值乘以 return 这些值的总和。
如果我在 stream
中使用 forEach
,我不能 return 值,因为变量必须是 final
或原子才能在对于每个。我最终无济于事:
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()));
});
获得列表后,执行此操作。不确定您的列表是什么样的。
BigDecimal sum = list.stream()
.map(sv -> sv.getServiceValue().multiply(sv.getServiceQuantity()))
.reduce(new BigDecimal(0.0), (a, b) -> a.add(b));
您可以修改您的实现以使用 foreach,例如:
BigDecimal serviceOrderTotal = BigDecimal.ZERO;
for (Service service : orderPresenter.getServiceList()) {
serviceOrderTotal = serviceOrderTotal.add(service.getServiceValue().multiply(service.getServiceQuantity()));
}
这也可以使用 java-stream 的 map
和 reduce
操作进一步转换为:
BigDecimal serviceOrderTotal = orderPresenter.getServiceList().stream()
.map(service -> service.getServiceValue().multiply(service.getServiceQuantity()))
.reduce(BigDecimal.ZERO, BigDecimal::add);
目前我正在使用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()));
}
我需要使用流来做同样的事情。对于每个 orderPresenters,我需要将数量值乘以 return 这些值的总和。
如果我在 stream
中使用 forEach
,我不能 return 值,因为变量必须是 final
或原子才能在对于每个。我最终无济于事:
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()));
});
获得列表后,执行此操作。不确定您的列表是什么样的。
BigDecimal sum = list.stream()
.map(sv -> sv.getServiceValue().multiply(sv.getServiceQuantity()))
.reduce(new BigDecimal(0.0), (a, b) -> a.add(b));
您可以修改您的实现以使用 foreach,例如:
BigDecimal serviceOrderTotal = BigDecimal.ZERO;
for (Service service : orderPresenter.getServiceList()) {
serviceOrderTotal = serviceOrderTotal.add(service.getServiceValue().multiply(service.getServiceQuantity()));
}
这也可以使用 java-stream 的 map
和 reduce
操作进一步转换为:
BigDecimal serviceOrderTotal = orderPresenter.getServiceList().stream()
.map(service -> service.getServiceValue().multiply(service.getServiceQuantity()))
.reduce(BigDecimal.ZERO, BigDecimal::add);