将下面代码进行优化,使用Stream流处理 List<PtmItemVo> ptmItemVoList = baseMapper.selectVoList(wrapper); List<PtmItemVo> list = new ArrayList<>(); for (PtmItemVo item : ptmItemVoList) { if ("dwgc".equals(item.getType())) { List<PtmItemVo> zdwgcList = findListByParentId(item.getId()); for (PtmItemVo zdwgcEntity : zdwgcList) { if ("zdwgc".equals(zdwgcEntity.getType())) { list.add(zdwgcEntity); } else if (!list.contains(item)) { list.add(item); } } } }
时间: 2024-02-10 20:13:06 浏览: 32
可以使用Stream流处理来优化这段代码,如下所示:
```
List<PtmItemVo> list = baseMapper.selectVoList(wrapper)
.stream()
.filter(item -> "dwgc".equals(item.getType()))
.flatMap(item -> {
List<PtmItemVo> zdwgcList = findListByParentId(item.getId());
return zdwgcList.stream()
.filter(zdwgcEntity -> "zdwgc".equals(zdwgcEntity.getType()))
.findFirst()
.map(Stream::of)
.orElse(Stream.of(item));
})
.collect(Collectors.toList());
```
首先,将List转换为Stream流,然后使用filter方法过滤出type属性为"dwgc"的元素。接着,使用flatMap方法将每个元素转换为一个Stream流,其中找到type属性为"zdwgc"的元素并返回,否则返回原元素。最后,使用collect方法将Stream流转换为List集合。
相关问题
优化一下代码 public IPage<FavoriteResp> favoritePage(IPage<FavoriteResp> page, String name, BladeUser bladeUser) { List<FavoriteResp> favoriteRespList; if (!AuthUtil.isAdministrator()) { favoriteRespList = baseMapper.favoritePage(page, name, bladeUser.getUserId()); } else { favoriteRespList = baseMapper.favoritePage(page, name, null); } List<SharedInfo> sharedInfoList = getSharedInfoList(); for (FavoriteResp favoriteResp : favoriteRespList) { List<SharedInfo> sharedInfos = sharedInfoList.stream().filter(sharedInfo -> sharedInfo.getResourcesId().equals(favoriteResp.getResourcesId())).collect(Collectors.toList()); favoriteResp.setResourcesTypeCn(DictCache.getValue(DictEnum.RESOURCES_TYPE, favoriteResp.getResourcesType())); List<String> memberImages = sharedInfos.stream().map(sharedInfo -> UserCache.getUser(sharedInfo.getSharedTo()).getAvatar()) .distinct().collect(Collectors.toList()); favoriteResp.setMemebersImage(memberImages); } return page.setRecords(favoriteRespList); }
可以使用左连接的方式一次性查询出所有需要的数据,避免多次查询数据库,从而提高查询效率。以下是优化后的代码:
```java
public IPage<FavoriteResp> favoritePage(IPage<FavoriteResp> page, String name, BladeUser bladeUser) {
QueryWrapper<FavoriteResp> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("f.name", name)
.eq(bladeUser != null, "f.user_id", bladeUser.getUserId())
.orderByDesc("f.create_time");
IPage<FavoriteResp> favoritePage = baseMapper.selectFavoritePage(page, queryWrapper);
List<FavoriteResp> favoriteList = favoritePage.getRecords();
if (CollUtil.isNotEmpty(favoriteList)) {
List<Long> resourcesIds = favoriteList.stream().map(FavoriteResp::getResourcesId).distinct().collect(Collectors.toList());
List<SharedInfo> sharedInfoList = getSharedInfoList(resourcesIds);
Map<Long, List<SharedInfo>> sharedInfoMap = sharedInfoList.stream().collect(Collectors.groupingBy(SharedInfo::getResourcesId));
for (FavoriteResp favoriteResp : favoriteList) {
favoriteResp.setResourcesTypeCn(DictCache.getValue(DictEnum.RESOURCES_TYPE, favoriteResp.getResourcesType()));
List<SharedInfo> sharedInfoSubList = sharedInfoMap.get(favoriteResp.getResourcesId());
if (CollUtil.isNotEmpty(sharedInfoSubList)) {
List<String> memberImages = sharedInfoSubList.stream()
.map(sharedInfo -> UserCache.getUser(sharedInfo.getSharedTo()).getAvatar())
.distinct().collect(Collectors.toList());
favoriteResp.setMemebersImage(memberImages);
}
}
}
return favoritePage;
}
private List<SharedInfo> getSharedInfoList(List<Long> resourcesIds) {
QueryWrapper<SharedInfo> queryWrapper = new QueryWrapper<>();
queryWrapper.in("resources_id", resourcesIds);
return sharedInfoService.list(queryWrapper);
}
```
上述代码中,首先使用QueryWrapper构建查询条件,并调用baseMapper.selectFavoritePage查询出需要的FavoriteResp数据。然后,使用stream的方式将FavoriteResp集合中所有的resourcesId提取出来,去重后构建一个resourcesIds列表。接着,调用getSharedInfoList方法一次性查询出resourcesIds列表中所有的SharedInfo集合。使用stream的方式将SharedInfo集合按resourcesId分组,构建一个sharedInfoMap映射表。最后,遍历FavoriteResp集合,从sharedInfoMap中取出对应的SharedInfo集合,并使用stream的方式将数据处理后放回FavoriteResp中。最后返回IPage<FavoriteResp>对象。
给下面代码增添注释 增添注释: @Override public R selectList() { QueryWrapper<Carousel> carouselQueryWrapper= new QueryWrapper<>(); carouselQueryWrapper.orderByDesc("priority"); List<Carousel> carousels = carouselMapper.selectList(carouselQueryWrapper); //stream List<Carousel> carouselList = carousels.stream().limit(6).collect(Collectors.toList()); R ok = R.ok(carouselList); log.info("CarouselServiceImpl.selectList业务完成,结果:{}",ok); return ok; } }
/**
* 选择列表方法的注释
* @return 返回R对象
*/
@Override
public R selectList() {
// 创建查询条件对象
QueryWrapper<Carousel> carouselQueryWrapper= new QueryWrapper<>();
carouselQueryWrapper.orderByDesc("priority");
// 查询数据库获取轮播图列表
List<Carousel> carousels = carouselMapper.selectList(carouselQueryWrapper);
// 通过流操作限制轮播图列表的数量为6个
List<Carousel> carouselList = carousels.stream().limit(6).collect(Collectors.toList());
// 构造返回结果对象
R ok = R.ok(carouselList);
// 记录日志
log.info("CarouselServiceImpl.selectList业务完成,结果:{}",ok);
// 返回结果
return ok;
}