JavaのストリームAPIを使用して、ネストされたリストを合計します

hotmeatballsoup:

私は、次の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
}

私がために、すべての注文ラインの総量をつかむのJavaの8「ストリー」の道を見つけようとしています。このカウントをつかんの「古い」の方法は、次のようになります。

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

これまでの私の最高の試み:

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

私はそののを反復処理ではないので、これは間違っている知っているList<OrderLine>と、各ラインの量を合計し、以来、それがコンパイルされませんfilter(...)に解決するための式を必要とするboolean、ではないint値。

私がゆがんで行くよ任意のアイデア?

サミュエル・フィリップ:

あなたは探しているStream.mapToInt()作成した、IntStreamIntStream.sum()あなたはこれを試すことができます。

int totalQuantity = order.getOrderLines().stream()
        .mapToInt(OrderLine::getQuantity)
        .sum();

これは、オーダーからすべての注文明細行の合計品質を合計します。

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=227616&siteId=1