java自己动手实现分页功能

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版权协议,转载请附上原文出处链接和本声明。