Solução
Uma forma de realizar soma de BigDecimal utilizando Stream (Java 8) é através do método Stream.reduce().
public class JavaSomaBigDecimalUtilizandoStream {
public static void main(String[] args)
{
List<Vaca> minhasVaquinhas = Arrays.asList(
new Vaca("Pretinha", BigDecimal.valueOf(2)),
new Vaca("Graúna", BigDecimal.valueOf(3)),
new Vaca("Coração", BigDecimal.valueOf(1.5)));
BigDecimal totalDeLitrosDeLeite = minhasVaquinhas.stream()
.map(Vaca::getLitrosDeLeite) // map
.reduce(BigDecimal.ZERO, BigDecimal::add); // reduce
System.out.println(totalDeLitrosDeLeite); // 6.5
}
}
class Vaca
{
private String nome;
private BigDecimal litrosDeLeite;
public Vaca(String nome, BigDecimal litrosDeLeite) {
this.nome = nome;
this.litrosDeLeite = litrosDeLeite;
}
public String getNome()
{
return nome;
}
public void setNome(String nome)
{
this.nome = nome;
}
public BigDecimal getLitrosDeLeite()
{
return litrosDeLeite;
}
public void setLitrosDeLeite(BigDecimal litrosDeLeite)
{
this.litrosDeLeite = litrosDeLeite;
}
}
Primeiro é feito o map, transformando o stream de objetos Vaca em um Stream de BigDecimal. Posteriormente é utilizado o método reduce() para realizar a soma de cada item do stream de BigDecimais, ou seja, será realizada a seguinte soma: 2+3+1,5, que dará o valor 6,5