递归算法应用并使用分页
直接上代码,注释很全 自己看
public List<Goods> findSubordinateGoods(Integer currentPage, Integer pageSize, String queryString) {
//查询所有信息
List<Goods> allGoods = findService.findAllGoods();
//根据queryString查找玩具厂信息
Stream<Goods> goodsStream = allGoods.stream().filter(goods -> goods.getGoodsName().equals(queryString));
//创建集合保存结果
List<Goods> resultGoods=new ArrayList<>();
//递归方法
goodsStream.forEach(goods -> findLowerEnterprise(allGoods,resultGoods,goods));
//进行分页处理
Long offset=0L;
if (currentPage - 1>=0){
offset = (currentPage.longValue()-1)* pageSize.longValue();
}
// 定义集合 用于添加数据
List<Goods> igoods=new ArrayList <>();
//取出每一个玩具名,用于查找数据
for (Goods goods : resultGoods) {
String GoodsName = goods.getGoodsName();
//调用方法传递名称,查询玩具分厂
List <Goods> goodsTransfer = findMapper.findSubordinateGoods(GoodsName);
//循环所有取出数据
for (Goods goods1 : goodsTransfer) {
//添加进集合
igoods.add(goods1);
}
}
//返回分页递归数据
return igoods.stream().skip(offset).limit(pageSize.longValue()).collect(Collectors.toList());
}
//递归代码
private void findLowerEnterprise(List <Goods> allGoods, List <Goods> resultGoods, Goods goods) {
//将传递过来的公司信息添加到结果集
resultGoods.add(goods);
//遍历所有玩具厂信息,查找子厂
for (int i = 0; i < allGoods.size(); i++) {
Goods goods1 = allGoods.get(i);
//判断该公司是否是子公司
if (goods1.getGoodsSuperior()!=null) {
if (goods1.getGoodsSuperior().equals(goods.getGoodsName())) {
//开始递归,查找下级公司
findLowerEnterprise(allGoods, resultGoods, goods1);
}
}
}
}
应根据实际业务自行修改,大方向不变,不可直接使用,需要微调,还会出一篇不分页的,需要的可以自行查找观看
本文探讨了如何将递归算法应用于分页场景,提供了带注释的Java代码示例,强调理解代码核心逻辑的重要性,并提醒读者需根据具体业务进行调整。
375

被折叠的 条评论
为什么被折叠?



