优化以下代码//入库类型时返回结果 List<InOutProductVO> inList = null; //查询主表(后续可进行优化) inList = inOutStockMapper.queryInStockList(vo); //通过循环去查询详情并将对应的详细放入list( 根据条件查询详情) inList.forEach(p->{ //这里加上单号查询 vo.setOtherNo(p.getOrderNo()); List<InOutProductDetailPO> list = inOutStockMapper.queryInStockListInfo(vo); p.setProductList(list); //因为查询需要总数这里需要累加总数 AtomicInteger total = new AtomicInteger(); list.forEach(po->{ total.addAndGet(po.getProductNum()); }); p.setTotal(total.intValue()); //前端需要出入库类型这里手动添加 p.setInOutType(1); }); return new PageInfo<>(inList);
时间: 2023-12-17 13:02:32 浏览: 91
优化建议如下:
1. 将查询主表与查询详情分离,避免每次查询都要重新查询主表。
2. 使用 Stream API 简化代码,避免显式使用循环。
3. 使用 lambda 表达式替换传统的匿名内部类,使代码更加简洁易懂。
4. 将累加总数的操作改为使用 Stream API 的 reduce 方法,避免使用 AtomicInteger。
重构后的代码如下:
```
List<InOutProductVO> inList = inOutStockMapper.queryInStockList(vo);
List<InOutProductDetailPO> detailList = inOutStockMapper.queryInStockListInfo(vo);
Map<String, List<InOutProductDetailPO>> detailMap = detailList.stream()
.collect(Collectors.groupingBy(InOutProductDetailPO::getOrderNo));
List<InOutProductVO> resultList = inList.stream().map(p -> {
List<InOutProductDetailPO> list = detailMap.get(p.getOrderNo());
p.setProductList(list);
p.setTotal(list.stream().mapToInt(InOutProductDetailPO::getProductNum).sum());
p.setInOutType(1);
return p;
}).collect(Collectors.toList());
return new PageInfo<>(resultList);
```
阅读全文