List<HospitalizationReceivingMedicineVO> dispensing = this.getDispensing(id); if(dispensing.size() == 0){throw new RuntimeException("打印失败,查无可打印的发药单");} Map<Long, HospitalizationReceivingMedicineVO> collect = dispensing.stream().collect(Collectors.toMap(x -> x.getDispensingNumber(), x -> x, (x1, x2) -> { x1.setTotalPrice(x1.getTotalPrice().add(x2.getTotalPrice())); return x1; })); List<HospitalizationReceivingMedicineVO> hospitalizationReceivingMedicineList = collect.entrySet().stream().map(x -> x.getValue()).collect(Collectors.toList()); BigDecimal totalPrice = hospitalizationReceivingMedicineList.get(0).getTotalPrice(); String diseassAreaName = dispensing.get(0).getDiseassAreaName(); Long dispensingNumber = dispensing.get(0).getDispensingNumber(); Date medicineTime = dispensing.get(0).getMedicineTime(); DispensingPrintVO dispensingPrintVO = new DispensingPrintVO(); dispensingPrintVO.setDispensingTime(medicineTime); dispensingPrintVO.setDispensingNumber(dispensingNumber); dispensingPrintVO.setInpatientArea(diseassAreaName); dispensingPrintVO.setChildren(dispensing); dispensingPrintVO.setAmountMoney(totalPrice); return dispensingPrintVO;优化以上代码
时间: 2024-02-16 16:05:16 浏览: 25
可以尝试对以上代码进行如下优化:
```
List<HospitalizationReceivingMedicineVO> dispensing = this.getDispensing(id);
if(dispensing.isEmpty()){
throw new RuntimeException("打印失败,查无可打印的发药单");
}
Map<Long, HospitalizationReceivingMedicineVO> collect = dispensing.stream()
.collect(Collectors.toMap(HospitalizationReceivingMedicineVO::getDispensingNumber, Function.identity(),
(x1, x2) -> {
x1.setTotalPrice(x1.getTotalPrice().add(x2.getTotalPrice()));
return x1;
}));
BigDecimal totalPrice = collect.values().stream()
.map(HospitalizationReceivingMedicineVO::getTotalPrice)
.reduce(BigDecimal.ZERO, BigDecimal::add);
HospitalizationReceivingMedicineVO first = collect.values().iterator().next();
DispensingPrintVO dispensingPrintVO = new DispensingPrintVO();
dispensingPrintVO.setDispensingTime(first.getMedicineTime());
dispensingPrintVO.setDispensingNumber(first.getDispensingNumber());
dispensingPrintVO.setInpatientArea(first.getDiseassAreaName());
dispensingPrintVO.setChildren(new ArrayList<>(collect.values()));
dispensingPrintVO.setAmountMoney(totalPrice);
return dispensingPrintVO;
```
主要的优化包括:
1. 使用 `isEmpty()` 方法来判断 `List` 是否为空,替代 `size() == 0` 的方式。
2. 使用方法引用和 `Function.identity()` 来简化 `toMap()` 方法中的 lambda 表达式。
3. 将 `collect()` 方法的结果转换为 `Map`,而不是 `List`,这样可以避免后面再次遍历 `List`。
4. 使用 `iterator().next()` 方法来获取第一个元素,替代 `get(0)` 的方式,避免 `List` 为空时出现异常。