递归查询全量分页数据问题

项目需要全量同步对方的用户机构数据,对方限制了分页条件,就需要递归全量拖过来。下面是实例代码:

java 复制代码
// 最大条数
public abstract class BaseLoader<T> {

   private final static Integer PAGE_SIZE = 1000;
 
   private Class<T> tClass;

    private String uri;

    public BaseLoader(Class<T> tClass, String uri) {
        this.tClass = tClass;
        this.uri = uri;
    }

   protected List<T> loadDataArray() {
        List<T> dataArrayResult = new ArrayList<>();
        PageNum pageNum = new PageNum();
        doLoad(dataArrayResult, pageNum);
        return dataArrayResult;
    }

    // 递归分页查找,把所有数据抓过来
    private void doLoad(List<T> dataArrayResult, PageNum pageNum) {
        List<T> dataArray = doLoadDataArray(pageNum);
        if (ZYListUtils.isEmptyList(dataArray)) {
        	return;
        }
       
        dataArrayResult.addAll(dataArray);
          // 比长度小,没得下一页了
          if (dataArray.size() < PAGE_SIZE) {
              return;
          }
          // 页数+1
          pageNum.nextPage();
          // 递归查询
          doLoad(dataArrayResult, pageNum);
    }

    private List<T> doLoadDataArray(PageNum pageNum) {
        String url = xxxProperties.getHost()+ uri;
        Map<String, Object> param = new HashMap<>();
        param.put("pageNum", pageNum.getPageNum());
        param.put("pageSize", PAGE_SIZE);
        JSONArray dataArray = post(url,param);
        return dataArray.toJavaList(tClass);
    }
}
java 复制代码
public class PageNum {

    private int pageNum = 1;

    public int getPageNum() {
        return pageNum;
    }

    public void nextPage() {
        pageNum++;
    }
}
相关推荐
安卓开发者2 分钟前
鸿蒙NEXT应用接入快捷栏:一键直达,提升用户体验
java·harmonyos·ux
yudiandian20149 分钟前
03 Eclipse 配置 JDK 环境
java·ide·eclipse
_码力全开_9 分钟前
P1005 [NOIP 2007 提高组] 矩阵取数游戏
java·c语言·c++·python·算法·矩阵·go
陈一Tender13 分钟前
JavaWeb后端实战(登录认证 & 令牌技术 & 拦截器 & 过滤器)
java·开发语言·spring boot·mysql
Camel卡蒙13 分钟前
红黑树详细介绍(五大规则、保持平衡操作、Java实现)
java·开发语言·算法
孤廖40 分钟前
吃透 C++ 栈和队列:stack/queue/priority_queue 用法 + 模拟 + STL 标准实现对比
java·开发语言·数据结构·c++·人工智能·深度学习·算法
我命由我1234542 分钟前
Android 对话框 - 对话框全屏显示(设置 Window 属性、使用自定义样式、继承 DialogFragment 实现、继承 Dialog 实现)
android·java·java-ee·android studio·android jetpack·android-studio·android runtime
Full Stack Developme1 小时前
java.net 包详解
java·python·.net
一叶飘零_sweeeet1 小时前
深入 Spring 内核:解密 15 种设计模式的实战应用与底层实现
java·spring·设计模式
凤山老林1 小时前
排序算法:详解插入排序
java·开发语言·后端·算法·排序算法