优化这段代码 //入库类型时返回结果 List<InOutProductVO> inList = null; //查询主表 inList = inOutStockMapper.queryInStockList(vo); //通过循环去查询详情并将对应的详细放入list( 根据条件查询详情) inList.stream().forEach(p->{ //这里加上单号查询 vo.setOtherNo(p.getOrderNo()); List<InOutProductDetailPO> list = inOutStockMapper.queryInStockListInfo(vo); p.setProductList(list); //因为查询需要总数这里需要累加总数 AtomicInteger total = new AtomicInteger(); list.stream().forEach(po->{ total.addAndGet(po.getProductNum()); }); p.setTotal(total.intValue()); //前端需要出入库类型这里手动添加 p.setInOutType(1); }); return new PageInfo<>(inList);
时间: 2023-12-10 09:42:10 浏览: 84
可以优化的地方有:
1. 使用Lambda表达式代替foreach循环
2. 避免重复查询,可以使用一个Map来缓存订单号对应的详情列表
3. 代码可读性可以更好,可以把一些常量抽象成字段或常量
下面是优化后的代码:
```
// 入库类型时返回结果
List<InOutProductVO> inList = new ArrayList<>();
// 查询主表
inList = inOutStockMapper.queryInStockList(vo);
// 用于缓存订单号对应的详情列表
Map<String, List<InOutProductDetailPO>> detailMap = new HashMap<>();
// 通过循环去查询详情并将对应的详细放入list( 根据条件查询详情)
inList.forEach(p -> {
// 这里加上单号查询
String orderNo = p.getOrderNo();
vo.setOtherNo(orderNo);
// 先从缓存里查找详情,如果没有再查询数据库
List<InOutProductDetailPO> list = detailMap.get(orderNo);
if (list == null) {
list = inOutStockMapper.queryInStockListInfo(vo);
detailMap.put(orderNo, list);
}
p.setProductList(list);
// 因为查询需要总数这里需要累加总数
AtomicInteger total = new AtomicInteger(0);
list.forEach(po -> {
total.addAndGet(po.getProductNum());
});
p.setTotal(total.intValue());
// 前端需要出入库类型这里手动添加
p.setInOutType(IN_STOCK_TYPE);
});
return new PageInfo<>(inList);
```
阅读全文