开发中,碰到了一些奇葩的业务逻辑,无法使用框架自身的分页功能,想了很久最后还是决定自己手写一个分页工具类,以备后续参考和使用,下面直接上代码,
/**
* 手动分页类
* @param datas
* @param pageSize
* @param pageNo
* @param <T>
* @return
*/
public static <T> List<T> getPageSizeDataForRelations(List<T> datas,int pageSize,int pageNo){
int startNum = (pageNo-1)* pageSize+1 ; //起始截取数据位置
if(startNum > datas.size()){
return null;
}
List<T> res = new ArrayList<>();
int rum = datas.size() - startNum;
if(rum < 0){
return null;
}
if(rum == 0){ //说明正好是最后一个了
int index = datas.size() -1;
res.add(datas.get(index));
return res;
}
if(rum / pageSize >= 1){ //剩下的数据还够1页,返回整页的数据
for(int i=startNum;i<startNum + pageSize;i++){ //截取从startNum开始的数据
res.add(datas.get(i-1));
}
return res;
}else if((rum / pageSize == 0) && rum > 0){ //不够一页,直接返回剩下数据
for(int j = startNum ;j<=datas.size();j++){
res.add(datas.get(j-1));
}
return res;
}else{
return null;
}
}
下面写个测试方法验证一下,
public static void main(String[] args) {
List<String> datas = new ArrayList<>();
datas.add("user1");
datas.add("user2");
datas.add("user3");
datas.add("user4");
datas.add("user5");
datas.add("user6");
datas.add("user7");
datas.add("user8");
datas.add("user9");
datas.add("user10");
datas.add("user11");
datas.add("user12");
datas.add("user13");
int pageSize = 5;
int pageNo = 1;
List<String> res = getPageSizeDataForRelations(datas,pageSize,pageNo);
for(String one : res){
System.out.println(one);
}
}
运行一下,下面是打印结果:
再换一组参数,
public static void main(String[] args) {
List<String> datas = new ArrayList<>();
datas.add("user1");
datas.add("user2");
datas.add("user3");
datas.add("user4");
datas.add("user5");
datas.add("user6");
datas.add("user7");
datas.add("user8");
datas.add("user9");
datas.add("user10");
datas.add("user11");
datas.add("user12");
datas.add("user13");
int pageSize = 5;
int pageNo = 3;
List<String> res = getPageSizeDataForRelations(datas,pageSize,pageNo);
for(String one : res){
System.out.println(one);
}
}
下面是运行的结果:
通过结果可以看到,得到了我们预期的分页效果!