Sumando una lista anidada utilizando la API de Java Corriente

hotmeatballsoup:

Tengo las siguientes POJOs Java:

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
}

Estoy tratando de encontrar una manera de Java 8 "Streamy" de agarrar la cantidad total de todos los OrderLines en un orden. La "vieja" de agarrar este conteo se vería así:

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

Mi mejor intento hasta el momento:

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

Sé que esto es un error ya que no es la iteración a través de List<OrderLine>y sumando la cantidad de cada línea, y no compila ya filter(...)las necesidades de la expresión de voluntad de una boolean, no un intvalor.

Cualquier idea dónde voy mal?

Samuel Philipp:

Que busca Stream.mapToInt(), que crea un IntStreame IntStream.sum(). Puede probar esto:

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

Esto resumir la calidad total de todas las líneas de pedido de un pedido.

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=227619&siteId=1
Recomendado
Clasificación