hot*_*oup 3 java java-8 java-stream
我有以下Java POJO:
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
}
Run Code Online (Sandbox Code Playgroud)
我正在尝试找到一种Java 8“ Streamy”方式来获取订单中所有订单行的总数。获取该计数的“旧”方法如下所示:
int totalQuantity = 0;
for (OrderLine ol : order.getOrderLines()) {
totalQuantity += ol.getQuantity();
}
Run Code Online (Sandbox Code Playgroud)
到目前为止,我最大的尝试是:
Integer totalQuantity = order.getOrderLines().stream().filter(ol -> ol.getQuantity());
Run Code Online (Sandbox Code Playgroud)
我知道这是错误的,因为它没有迭代List<OrderLine>和求和每行的数量,并且它不编译,因为filter(...)需要将表达式解析为a boolean而不是int值。
有什么想法我要去哪里吗?
您正在寻找Stream.mapToInt(),这会创建IntStream和IntStream.sum()。您可以尝试以下方法:
int totalQuantity = order.getOrderLines().stream()
.mapToInt(OrderLine::getQuantity)
.sum();
Run Code Online (Sandbox Code Playgroud)
这将汇总订单中所有订单行的总体质量。