java自己动手实现分页功能
import java.util.ArrayList;
import java.util.List;
/**
* <p>传数据集合list到此进行分页
* 页码从1开始
* 默认每页显示10条记录</p>
* @author lsq
* @date 2018年9月9日
*/
public class Paper_lsq<T>{
/**
* 所有的记录
*/
private List<T> allList=null;
/**
* 每页需要显示的数据
*/
private List<T> pageList=null;
/**
* 所有记录总条数
*/
private int sum=0;
//每页显示记录条数
private int per_record;
/**
* 总页数
*/
private int page_counts=0;
/**
* 当前页
*/
private int this_page=0;
public Paper_lsq(List<T> list) {
//配置每页显示记录数
this.per_record=10;
//配置所有记录
this.allList=list;
//配置记录总数
this.sum=this.allList.size();
//配置总页数
calculatePerRecord();
//配置当前页页码
setThisPage(1);
//配置当前页记录
setThisList();
}
/**
*
* @Description:<p>配置当前页页码</p>
* @author lsq
* @param Page
*/
public void setThisPage(int Page) {
if(Page<=1) {
Page=1;
}else if(Page>=this.page_counts) {
Page=this.page_counts;
}
//内部真正页码是从0开始 所以减一
this.this_page =Page-1;
//每次设置页码的时候都从新配置一下当前页的数据
setThisList();
}
/**
*
* @Description:<p>计算总页数</p>
* @author lsq
*/
private void calculatePerRecord() {
//如果所有记录list为空,直接终止计算
if(this.getAllList()==null) {
return ;
}
//如果所有记录刚刚好整除每页显示的记录条数
int sumPage=this.sum/this.per_record;
//否则就多了一页不完全页
if(this.sum%this.per_record>0) {
++sumPage;
}
this.page_counts = sumPage;
}
/**
*
* @Description:<p>配置当前页是数据</p>
* @author lsq
*/
private void setThisList(){
//每页开始索引
int index_start=this.this_page*this.per_record;
//每页结束索引
int index_end=(this.this_page+1)*this.per_record>this.allList.size()?
this.allList.size():(this.this_page+1)*this.per_record;
//存数据进当前页之前 先清空当前页的数据
this.pageList=new ArrayList();
for (int i = index_start; i <index_end; ++i) {
this.pageList.add(this.allList.get(i));
}
}
public List<T> getAllList() {
return allList;
}
public List<T> getPageList() {
return pageList;
}
public int getSum() {
return sum;
}
public int getPer_record() {
return per_record;
}
/**
*
* @Description:<p>配置每页显示的记录条数</p>
* @author lsq
* @param per_record
*/
public void setPer_record(int per_record) {
this.per_record = per_record;
//重新配置每页显示的记录条数后,需要重新配置总页数和当前页的记录
setThisList();
calculatePerRecord();
}
public int getPage_counts() {
return page_counts;
}
public int getThis_page() {
return this_page+1;
}
}
简单测试一下上面写好的分页
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
List<Integer> list =new ArrayList<>();
for(int i=0;i<20;++i){
list.add(i);
}
Paper_lsq<Integer> p=new Paper_lsq(list);
p.setPer_record(4);
int page=1;
System.out.println("当前第"+p.getThis_page()+"页");
for (Integer integer : p.getPageList()) {
System.out.println(integer);
}
int choose=-1;
while(choose!=0) {
System.out.println("请输入:1上一页 2下一页");
choose=new Scanner(System.in).nextInt();
switch (choose) {
case 1:
p.setThisPage(--page);
page=p.getThis_page();
System.out.println("当前页页码是:"+p.getThis_page()+"总页码:"+p.getPage_counts());
for (Integer integer : p.getPageList()) {
System.out.println(integer);
}
break;
case 2:
p.setThisPage(++page);
page=p.getThis_page();
System.out.println("当前页页码是:"+p.getThis_page()+" 总页码:"+p.getPage_counts());
for (Integer integer : p.getPageList()) {
System.out.println(integer);
}
break;
default:
choose=0;
System.out.println("退出系统");
break;
}
}
}
}
大功告成!
版权声明:本文为weixin_42939779原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。