# Java 8 – How to Sum BigDecimal using Stream?

In Java 8, we can use the `Stream.reduce()` to sum a list of `BigDecimal`.

## 1. Stream.reduce()

Java example to sum a list of `BigDecimal` values, using a normal for loop and a `stream.reduce()`.

JavaBigDecimal.java
``````
package com.mkyong;

import java.math.BigDecimal;
import java.util.List;

public class JavaBigDecimal {

public static void main(String[] args) {

// sum using a for loop
BigDecimal sum = BigDecimal.ZERO;
for (BigDecimal amt : invoices) {
}
System.out.println("Sum = " + sum);

// sum using stream
System.out.println("Sum (Stream) = " + sum2);

}

}
``````

Output

``````
Sum = 36.59
Sum (Stream) = 36.59
``````

## 2. Map & Reduce

Sum all `BigDecimal` from a list of `Invoices`.

JavaBigDecimalObject.java
``````
package com.mkyong;

import java.math.BigDecimal;
import java.math.RoundingMode;
import java.util.Arrays;
import java.util.List;

public class JavaBigDecimalObject {

public static void main(String[] args) {

List<Invoice> invoices = Arrays.asList(
new Invoice("I1001", BigDecimal.valueOf(9.99), BigDecimal.valueOf(1)),
new Invoice("I1002", BigDecimal.valueOf(19.99), BigDecimal.valueOf(1.5)),
new Invoice("I1003", BigDecimal.valueOf(4.888), BigDecimal.valueOf(2)),
new Invoice("I1004", BigDecimal.valueOf(4.99), BigDecimal.valueOf(5)),
new Invoice("I1005", BigDecimal.valueOf(.5), BigDecimal.valueOf(2.3))
);

BigDecimal sum = invoices.stream()
.map(x -> x.getQty().multiply(x.getPrice()))    // map

System.out.println(sum);    // 75.851
System.out.println(sum.setScale(2, RoundingMode.HALF_UP));  // 75.85

}

}

class Invoice {

String invoiceNo;
BigDecimal price;
BigDecimal qty;

public Invoice(String invoiceNo, BigDecimal price, BigDecimal qty) {
this.invoiceNo = invoiceNo;
this.price = price;
this.qty = qty;
}

public String getInvoiceNo() {
return invoiceNo;
}

public void setInvoiceNo(String invoiceNo) {
this.invoiceNo = invoiceNo;
}

public BigDecimal getPrice() {
return price;
}

public void setPrice(BigDecimal price) {
this.price = price;
}

public BigDecimal getQty() {
return qty;
}

public void setQty(BigDecimal qty) {
this.qty = qty;
}
}
``````

Output

``````
75.851
75.85
``````

## References

#### mkyong

Founder of Mkyong.com, love Java and open source stuff. Follow him on Twitter. If you like my tutorials, consider make a donation to these charities. Read all published posts by

Guest
Stephen

Thank you so much !!!