1.假设我们有一个list对象。对象里边存放着预算编号、预算金额。


PurchasePlanDetailsBudgetPO purchasePlanDetailsBudgetPO = new PurchasePlanDetailsBudgetPO();
        purchasePlanDetailsBudgetPO.setBudgetNo("0000001");
        purchasePlanDetailsBudgetPO.setSelectionAmount(new BigDecimal(100));
        list.add(purchasePlanDetailsBudgetPO);
 
        PurchasePlanDetailsBudgetPO purchasePlanDetailsBudgetPO1 = new PurchasePlanDetailsBudgetPO();
        purchasePlanDetailsBudgetPO1.setBudgetNo("0000001");
        purchasePlanDetailsBudgetPO1.setSelectionAmount(new BigDecimal(100));
        list.add(purchasePlanDetailsBudgetPO1);
 
        PurchasePlanDetailsBudgetPO purchasePlanDetailsBudgetPO2 = new PurchasePlanDetailsBudgetPO();
        purchasePlanDetailsBudgetPO2.setBudgetNo("0000002");
        purchasePlanDetailsBudgetPO2.setSelectionAmount(new BigDecimal(100));

2.以上new了三个对象,有两个编号是一样的。接下来可以对编号进行分组然后求出来金额的总和。

Map<String, BigDecimal> listMap = list.stream().collect(
                Collectors.groupingBy(
                        PurchasePlanDetailsBudgetPO::getBudgetNo,
                        Collectors.reducing(BigDecimal.ZERO, PurchasePlanDetailsBudgetPO::getSelectionAmount,  BigDecimal::add)));

以上就是分组求和,比较简单,完全可以通过java8中的stream来实现