优化这段代码: if (divisibleBill.size() > 1 && !divisibleBill.isEmpty()) { // 2.1 取出子票金额,并求其总和 BigDecimal divisibleBillSum = divisibleBill.stream().map(IfbEcdsDrftInf::getIsseAmt).reduce(BigDecimal.ZERO, BigDecimal::add); // 2.2 拿出原票金额,若子票总金额等于原票金额,则进行后续判断 BigDecimal originalBillAmt = originalBill.get(0).getIsseAmt(); if (divisibleBillSum == originalBillAmt || divisibleBillSum.equals(originalBillAmt)) { String startRange = originalBill.get(0).getStartCdRange(); String endRange = originalBill.get(0).getEndCdRange(); // 2.3 查询电票信息表的母票,并更新状态 List<IfbEcdsDrftInf> originalEcdsBill = dao.selectAll(IfbEcdsDrftInf.class, Cnd.where("idNb", "=", idNb) .and(Cnd.where("startCdRange", "=", startRange)) .and(Cnd.where("endCdRange", "=", endRange))); IfbEcdsDrftInf ecdsDrft = originalEcdsBill.get(0); ecdsDrft.setDrftSndStat(ECDSConstants.DRAFT_STATUS_JSYJQ); ecdsDrft.setDrftRcvStat(ECDSConstants.DRAFT_STATUS_JSYJQ); ecdsDrft.setDrftCurrStat(ECDSConstants.DRAFT_STATUS_JSYJQ);// 结束已结清 dao.update(ecdsDrft); } }
时间: 2024-02-14 21:10:23 浏览: 88
Java 实例 - 字符串优化源代码-详细教程.zip
这段代码的优化点比较多,我会一步步地进行优化:
1. 首先,判断 `divisibleBill` 是否为空的语句可以去掉,因为在判断其长度时,已经排除了其为空的情况。
2. 在计算 `divisibleBillSum` 时,可以使用 `BigDecimal` 提供的 `sum()` 方法,避免使用 `map()` 和 `reduce()` 的方式。
3. 在判断 `divisibleBillSum` 是否等于 `originalBillAmt` 时,可以使用 `compareTo()` 方法代替 `==` 和 `equals()`,因为在 `BigDecimal` 中,这两种比较方式会出现精度问题。
4. 在查询 `originalEcdsBill` 时,可以使用链式写法,避免重复的 `Cnd.where()` 方法。
5. 在更新 `ecdsDrft` 对象时,可以使用 `dao.update()` 方法的批量更新功能,避免每次更新只更新一个对象的情况。
优化后的代码如下:
```
if (divisibleBill.size() > 1) {
// 取出子票金额,并求其总和
BigDecimal divisibleBillSum = divisibleBill.stream().map(IfbEcdsDrftInf::getIsseAmt).sum();
// 拿出原票金额,若子票总金额等于原票金额,则进行后续判断
BigDecimal originalBillAmt = originalBill.get(0).getIsseAmt();
if (divisibleBillSum.compareTo(originalBillAmt) == 0) {
String startRange = originalBill.get(0).getStartCdRange();
String endRange = originalBill.get(0).getEndCdRange();
// 查询电票信息表的母票,并更新状态
List<IfbEcdsDrftInf> originalEcdsBill = dao.selectAll(IfbEcdsDrftInf.class,
Cnd.where("idNb", "=", idNb)
.and("startCdRange", "=", startRange)
.and("endCdRange", "=", endRange));
IfbEcdsDrftInf ecdsDrft = originalEcdsBill.get(0);
ecdsDrft.setDrftSndStat(ECDSConstants.DRAFT_STATUS_JSYJQ);
ecdsDrft.setDrftRcvStat(ECDSConstants.DRAFT_STATUS_JSYJQ);
ecdsDrft.setDrftCurrStat(ECDSConstants.DRAFT_STATUS_JSYJQ);// 结束已结清
dao.update(IfbEcdsDrftInf.class, Chain.make("drftSndStat", ECDSConstants.DRAFT_STATUS_JSYJQ)
.add("drftRcvStat", ECDSConstants.DRAFT_STATUS_JSYJQ)
.add("drftCurrStat", ECDSConstants.DRAFT_STATUS_JSYJQ),
Cnd.where("idNb", "=", idNb)
.and("startCdRange", "=", startRange)
.and("endCdRange", "=", endRange));
}
}
```
阅读全文