如何使用 Java Stream API 从列表列表中添加总金额?

问题描述 投票:0回答:1

我有课:

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();

}

所以我在客户服务中尝试了上面的方法。但返回的金额仅适用于列表中的第一项。那么以同样的方式,我该如何编写才能获取该客户所有订单的总金额?

任何建议/意见都会有帮助。

注意:对于任何编译错误,我们深表歉意。我无法复制我的代码,所以我需要写在问题中。

java lambda java-stream
1个回答
5
投票

您使用

flatMap()

double total = custList.stream()
        .flatMap(c -> c.getOrders().stream())
        .mapToDouble(Order::getAmount)
        .sum();

另请注意使用方法参考从订单中获取金额。

© www.soinside.com 2019 - 2024. All rights reserved.