Collectors分组后求和另一个字段
时间: 2025-06-28 12:14:53 浏览: 6
### 使用 Java Collectors 对分组结果的另一字段求和
对于给定的对象列表,可以通过 `Stream` 和 `Collectors` 来实现基于特定字段的分组并对其他字段执行聚合操作,比如求和。具体来说,在处理对象列表时,先通过指定的关键字段进行分组,再利用合适的收集器来完成数值字段的汇总。
当需要按照某个属性分组并对其它属性求和时,可以采用如下方式:
```java
import java.math.BigDecimal;
import java.util.*;
import java.util.stream.Collectors;
class PurchasePlanDetailsBudgetPO {
private String budgetNo;
private BigDecimal selectionAmount;
public PurchasePlanDetailsBudgetPO(String budgetNo, BigDecimal selectionAmount) {
this.budgetNo = budgetNo;
this.selectionAmount = selectionAmount;
}
public String getBudgetNo() { return budgetNo; }
public BigDecimal getSelectionAmount() { return selectionAmount; }
}
public class Main {
public static void main(String[] args) {
List<PurchasePlanDetailsBudgetPO> list = Arrays.asList(
new PurchasePlanDetailsBudgetPO("001", new BigDecimal("100")),
new PurchasePlanDetailsBudgetPO("002", new BigDecimal("200")),
new PurchasePlanDetailsBudgetPO("001", new BigDecimal("300"))
);
Map<String, BigDecimal> listMap = list.stream()
.collect(Collectors.groupingBy(PurchasePlanDetailsBudgetPO::getBudgetNo,
Collectors.reducing(BigDecimal.ZERO, PurchasePlanDetailsBudgetPO::getSelectionAmount, BigDecimal::add)));
System.out.println(listMap);
}
}
```
上述代码展示了如何创建一个映射表,其中键为预算编号 (`budgetNo`) 而值则代表对应编号下所有记录的选择金额(`selectionAmount`)之和[^2]。
为了进一步扩展此功能至更多场景或更复杂的业务逻辑中去,还可以考虑引入更多的分组条件或是组合不同的收集策略以满足实际需求。
阅读全文
相关推荐


















