Collectors.groupingBy 分组然后对BigDecimal类型的数字求和
时间: 2024-11-15 13:32:49 浏览: 12
深入探索Java 8的`Collectors.groupingBy()`:分组的艺术
`Collectors.groupingBy` 是 Java Stream API 中的一个收集操作,它用于根据指定键将元素分组,并对每个分组应用定制的操作。如果你想要对 `BigDecimal` 类型的数字进行分组并计算每组的总和,可以按照以下步骤操作:
首先,假设你有一个列表(List<YourClass>)其中包含 `YourClass` 对象,每个对象有 key 和 BigDecimal 类型的 value,你可以这样做:
```java
import java.math.BigDecimal;
import java.util.*;
import java.util.stream.Collectors;
class YourClass {
String key;
BigDecimal value;
// ...其他属性...
}
List<YourClass> yourList = ...; // 你的 BigDecimal 数字列表
// 使用 groupingBy 进行分组,summingBigDecimal 作为每个组内的求和操作
Map<String, BigDecimal> groupedAndSummed = yourList.stream()
.collect(Collectors.groupingBy(YourClass::getKey,
Collectors.reducing(BigDecimal.ZERO, YourClass::getValue, BigDecimal::add)));
// groupedAndSummed 现在是一个 Map,key 是 group 的标识,value 是该组内所有值的总和
```
这里的关键在于 `Collectors.reducing()` 函数,它接受一个初始值(这里是零),一个累积函数(在这里是添加操作 `BigDecimal::add`)以及合并两个值的函数(也是加法)。这样每个 group 的值就会累加起来。
阅读全文