我有课:
public class Customer{
private List<Order> orders;
private String name;
...
}
public class Order{
private long orderId;
private String customerId;
private double amount;
...
}
public class CustomerService{
@Autowired
private CustomerRepository customerRepo;
List<Customer> custList = customerRepo.findAllCustomers();
double amount = custList.stream().map(c -> {
return c.getOrders().stream().mapToDouble(o -> o.getAmount()).sum()}).findAny().get();
}
所以我在客户服务中尝试了上面的方法。但返回的金额仅适用于列表中的第一项。那么以同样的方式,我该如何编写才能获取该客户所有订单的总金额?
任何建议/意见都会有帮助。
注意:对于任何编译错误,我们深表歉意。我无法复制我的代码,所以我需要写在问题中。
flatMap()
:
double total = custList.stream()
.flatMap(c -> c.getOrders().stream())
.mapToDouble(Order::getAmount)
.sum();
另请注意使用方法参考从订单中获取金额。