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 int
valor.
Cualquier idea dónde voy mal?
Samuel Philipp:
Que busca Stream.mapToInt()
, que crea un IntStream
e 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.