List<ResourceStandingBookVo> bookVos = new ArrayList<>(); for (OrganizationLevelVo vo : vos) { ResourceStandingBookVo standingBookVo = new ResourceStandingBookVo(); List<ResourceStandingBookVo> standingBookVos = baseResourceSuppliesMapper.selectSuppliesDate(vo); standingBookVo.setWire(standingBookVos.stream().mapToLong(ResourceStandingBookVo::getWire).sum()); standingBookVo.setTransformer(standingBookVos.stream().mapToLong(ResourceStandingBookVo::getTransformer).sum()); standingBookVo.setInsulator(standingBookVos.stream().mapToLong(ResourceStandingBookVo::getInsulator).sum()); standingBookVo.setTowerMaterial(standingBookVos.stream().mapToLong(ResourceStandingBookVo::getTowerMaterial).sum()); standingBookVo.setUnitId(vo.getId()); bookVos.add(standingBookVo); }优化代码 baseResourceSuppliesMapper.selectSuppliesDate方法进行优化
时间: 2024-01-08 09:04:43 浏览: 28
可以考虑使用一次性查询来减少数据库的访问次数,例如使用左连接关联查询,将vos和baseResourceSupplies表连接起来,这样可以一次性查询所有需要的数据。具体实现可以参考以下代码:
```java
List<ResourceStandingBookVo> bookVos = new ArrayList<>();
List<OrganizationLevelVo> vos = ... // 获取vos
List<ResourceStandingBookVo> standingBookVos = baseResourceSuppliesMapper.selectSuppliesDateByVos(vos);
Map<Long, List<ResourceStandingBookVo>> standingBookMap = standingBookVos.stream().collect(Collectors.groupingBy(ResourceStandingBookVo::getUnitId));
for (OrganizationLevelVo vo : vos) {
ResourceStandingBookVo standingBookVo = new ResourceStandingBookVo();
List<ResourceStandingBookVo> unitStandingBookVos = standingBookMap.get(vo.getId());
if (unitStandingBookVos != null) {
standingBookVo.setWire(unitStandingBookVos.stream().mapToLong(ResourceStandingBookVo::getWire).sum());
standingBookVo.setTransformer(unitStandingBookVos.stream().mapToLong(ResourceStandingBookVo::getTransformer).sum());
standingBookVo.setInsulator(unitStandingBookVos.stream().mapToLong(ResourceStandingBookVo::getInsulator).sum());
standingBookVo.setTowerMaterial(unitStandingBookVos.stream().mapToLong(ResourceStandingBookVo::getTowerMaterial).sum());
}
standingBookVo.setUnitId(vo.getId());
bookVos.add(standingBookVo);
}
```
在这里,我们新建一个Map对象,将查询出来的数据按照unitId分组,然后在循环中通过vo的id来获取对应的数据,最后将结果添加到bookVos中。这样可以一次性查询出所有需要的数据,减少了数据库的访问次数,提高了效率。同时,我们还可以考虑使用缓存来进一步优化性能。