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));
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.

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

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

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