欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Java实现自制分页插件

程序员文章站 2022-07-14 23:08:25
...

在一个项目中分页是必不可少的,我自己编写了一个,在数据量较少的时候自认为还是不错的。如果想要使用,直接复制代码就可以。就算不符合需求,还可以再改。下面的代码,注释很详细。

 

package blog.util;

import java.util.ArrayList;
import java.util.List;

/**
 * 分页,创建对象时传入总列表以及每页最大数,<br>
 *     可通过getPaging(int page)或getPaging()方法获取想要的分页,<br>
 *         其中 page 为想要的分页页码,默认为1。
 * @param <T> 传入的总列表中元素的类型
 */
public class Paging<T> {
    /**
     * 当前页码
     */
    private int pageNum = 1;
    /**
     * 每页最大条数
     */
    private final int pageCount;
    /**
     * 总条数
     */
	private final int totalCount;
    /**
     * 总页数
     */
	private int totalPage;
    /**
     * 当前页条数
     */
	private int currentCount;
    /**
     * 总列表
     */
    private final List<T> totalList;

    /**
     * 创建 Paging 对象,用于分页
     * @param pageCount 每页最大条数
     * @param totalList 总列表
     */
    public Paging(int pageCount, List<T> totalList) {
        this.pageCount = pageCount;
        this.totalList = totalList;

        // 总条数为需要处理的商品列表条数
        this.totalCount = totalList.size();
        // 设置总页数
        this.setTotalPage();
    }

    /**
     * 设置总页数
     */
    private void setTotalPage(){
        double a = (double) totalCount / (double) pageCount;
        totalPage = (int) Math.ceil(a);
    }

    /**
     * 获取期待页码的列表,从1开始
     * @param pageNum 想要获取的分页页码
     * @return 当前分页显示的数据列表
     */
    public List<T> getPaging(int pageNum){
        // 设置当前页码
        this.pageNum = pageNum;
        // 每页最大条数
        int pageCount = this.pageCount;

        // 总列表
        List<T> totalList = this.totalList;
        // 当前页列表
        List<T> pageList = new ArrayList<>();

        // 想要获取的分页的数据在总列表中开始处的索引值
        int start = (pageNum - 1) * pageCount;
        // 结束处的索引
        int end = start + pageCount;
        if (end > totalList.size()){
            // 如果结束处的索引值比总列表的长度大,那么结束处的索引为总列表长度
            end = totalList.size();
        }

        for (int i = start; i < end; i++) {
            // 通过循环将总列表中指定索引区间内的元素添加进新列表
            pageList.add(totalList.get(i));
        }

        // 当前页条数
        this.currentCount = pageList.size();
        return pageList;
    }

    /**
     * 获取当前分页的商品列表
     * @return 当前分页显示的数据列表
     */
    public List<T> getPaging(){
        return this.getPaging(this.pageNum);
    }

    /**
     * 获取 总条数
     * @return totalCount 总条数
     */
    public int getTotalCount() {
        return totalCount;
    }

    /**
     * 获取 总页数
     * @return totalPage 总页数
     */
    public int getTotalPage() {
        return totalPage;
    }

    /**
     * 获取 当前页条数,<br>
     *     未调用 getPaging() 方法前为 0
     * @return currentCount 当前页条数
     */
    public int getCurrentCount() {
        return currentCount;
    }

    /**
     * 获取 当前页码,默认为1
     * @return pageNum 当前页码
     */
    public int getPageNum() {
        return pageNum;
    }

    /**
     * 设置当前页码
     * @param pageNum 当前页码
     */
    public void setPageNum(int pageNum) {
        this.pageNum = pageNum;
    }
}