使用Java Stream API对嵌套列表进行求和

3

我有以下Java POJOs:

public class Order {
    private List<OrderLine> orderLines;
    private String name;
    // ... lots of other fields

    // Getters & setters & ctors down here
}

public class OrderLine {
    private String productId;
    private Integer quantity;

    // Getters & setters & ctors down here
}

我正在尝试寻找一种Java 8“Streamy”的方式来获取订单中所有订单行的总数量。旧的方式获取此计数的方法如下:

int totalQuantity = 0;
for (OrderLine ol : order.getOrderLines()) {
    totalQuantity += ol.getQuantity();  
}

我目前的最佳尝试:

Integer totalQuantity = order.getOrderLines().stream().filter(ol -> ol.getQuantity());

我知道这是错误的,因为它没有迭代遍历 List<OrderLine> 并总结每个订单行的数量,而且它也无法编译,因为 filter(...)需要表达式解析为一个布尔值,而不是一个整数值。

你有什么想法我哪里出了错吗?

1个回答

5
你正在寻找 Stream.mapToInt(),它创建一个 IntStream 并使用 IntStream.sum() 方法。你可以尝试这个方法:
int totalQuantity = order.getOrderLines().stream()
        .mapToInt(OrderLine::getQuantity)
        .sum();

这将总结订单中所有订单行的总质量。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接