Caba da TI

Caba da TI

Como somar BigDecimal utilizando Stream API (Java 8)

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

Referências

Java 8 – How to Sum BigDecimal using Stream?

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *