概述
背景
之前都是通过mybatis-plus结合单服务的数据查询直接进行分页,后来设计到一个需求是去不同的服务拿到同结构的数据再进行整合处理,所以需要对查询后的List结果进行分类,所以本篇就是记录一个手动进行分页的笔记。
原理
查询LIst的size作为总数记录total,分页入参current表示当前查询页,入参size表示一页需要显示多少,通过这几个参数的关系进行计算得出需要对集合进行截取的参数,最后取出子集就好了。
实现
1.新建分页类,用于存储并初始化分页信息及最终结果的返回
@Data
@AllArgsConstructor
@NoArgsConstructor
public class Page<T> implements Serializable {
private List<T> records; //最终查询的结果记录
private long total; //共有多少条记录
private long size; //一页显示多少条
private long current; //取第几页显示
private long pages; //总共几页
private long startIndex; //从哪里开始截取集合的下标
//获取初始化分页对象 这里用long类型是为了与mybatisplus保持一致
public Page<String> getPage(long total, long size ,long current){
Page<String> page = new Page<>();
page.setTotal(total);
page.setSize(size);
//总页数的计算 如果集合总记录数能被入参size(一页几条)整除,则为对应商,否则多出部分也独立算一页
page.setPages(total % size == 0 ? total / size : total / size + 1);
//前端约定入参从1开始,但此处入参调用时会减1,此处+1恢复原值供前端展示
page.setCurrent(current + 1);
//开始索引的设置
page.setStartIndex(size * current);
return page;
}
}
2.分页处理方法
public static List<String> testing(long total, long current, long size, List<String> str){
List<String> result = new ArrayList<>();
//获取初始化分页结构
Page<String> page = new Page().getPage(total, size, current - 1);
//获取集合下标初始值
long startIndex = page.getStartIndex();
//获取集合下标结束值
long endInddex = 0;
/**
* 如果初始值startIndex(size * current)超过总记录数 或者 入参size(一页显示多少条)大于总记录树,
* 则下标结束值均设置为集合大小
*/
if(startIndex + page.getCurrent() >= total || size > total){
endInddex = total;
}else {
/**当最后一页,开始下标加上要取值的size 大于总条数,则最终索引改为集合大小-1=》为
*集合的最后下标值,防止下标溢出
**/
if(total < startIndex + page.getSize()){
endInddex = total - 1 ;
}else {
//否则为startIndex(size * current 从哪里开始取)加上一页显示多少条得到结束值
endInddex = startIndex + page.getSize();
}
}
//如果输入的开始查询下标大于集合大小,则查询为空值
if(startIndex > total){
result = Collections.emptyList();
}else{
result = str.subList((int)startIndex,(int)endInddex);
}
/**
* 此处返回结果可以改为Page<T> T为对应业务的实体类型,最终把分页结果再塞入page的records再返回则得到与
* mybatisplus一样的结构
* page.setRecords(list);
* return page;
*/
return result;
}
3.调用分页处理方法
public static void main(String[] args) {
List<String> str = Arrays.asList("a","b","c","d","e","f","g");
long total = str.size();
long current = 1;
long size = 10;
List<String> list = testing(total,current,size,str);
list.stream().forEach(System.out::print);
}
到此结束
最后
以上就是活力吐司为你收集整理的JAVA笔记 | 手动对查询结果List进行分页的全部内容,希望文章能够帮你解决JAVA笔记 | 手动对查询结果List进行分页所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复