/ / Erro de compilação usando CollectionUtills da nova API do Java 8 - java, lambda, java-8

Erro de compilação usando CollectionUtills da nova API do Java 8 - java, lambda, java-8

Eu quero iterar uma matriz com alguns objetos que contém uma quantidade e obter o totalQuantity, mas usando a nova API do Java 8 em vez do típico para cada loop.

É assim que estou fazendo até agora:

int totalQuantityOrdered=0;
totalQuantityOrdered=CollectionUtils.isNotEmpty(details)?details.stream().forEach(detail->totalQuantityOrdered+=detail.getOrderHeader().getQuantity()):totalQuantityOrdered;

No entanto, estou recebendo um erro de compilação informandome que, para usar uma expressão lambda, a variável totalQuantityOrdered deve ser final. Então eu acho que quando uma variável é final significa que seu valor não pode ser modificado; nesse caso, como faço para alcançar o que estou tentando fazer?

Obrigado antecipadamente pelo seu tempo.

Respostas:

5 para resposta № 1

Há uma maneira muito mais limpa de fazer isso:

int totalQuantityOrdered =
details.stream()
.mapToInt(detail -> detail.getOrderHeader().getQuantity())
.sum();

Isso está assumindo que getOrderHeader().getQuantity() retorna um int.