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 № 1Há 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
.