How To Solve Stream Sum Precision Problem

How To Solve Stream Sum Precision Problem

這篇介紹How To Solve Stream Sum Precision Problem。

有精確度問題的example

1
2
3
4
5
6
int sum = persons.stream()
.filter(person -> person.getGender() == Person.Gender.MALE)
.mapToDouble(Person::getWeight)
.sum();

當Weight欄位數值有無窮小數點時,做sum運算會有精確度問題。

使用reduce

1
2
3
4
5
int sum = persons.stream()
.filter(person -> person.getGender() == Person.Gender.MALE)
.mapToDouble(Person::getWeight)
.reduce((total, weight) -> BigDecimalUtils.add(total, weight).doubleValue())
.getAsDouble();