自定义分页工具类

前言

在日常的开发工作中,会遇到很多不确定的需求场景,无法使用第三方提供的分页组件来实现,那么如何自己实现一个简单的分页工具类呢?

工具类

第一版本:
java 复制代码
@Setter
@Getter
public class PageTool<T> {
    /**
     * 当前页数
     */
    private int pageNum;
    /**
     * 每页的记录条数
     */
    private int pageSize;
    /**
     * 总记录数
     */
    private int total;
    /**
     * 总页数
     */
    private int pages;
    /**
     * 当前开始值
     */
    private int start;
    /**
     * 总记录数
     */
    private List<T> list;

    public PageTool(List<T> list) {
        this.total = list.size();
        this.list = list;
    }

    public void startPage(int pageNum, int pageSize) {
        // 1、获取总记录数和分页数
        this.pageNum = pageNum;
        this.pageSize = pageSize;
        this.pages =
                total % pageSize == 0 ?
                        (total / pageSize) :
                        (total / pageSize) + 1;
        // 2、根据分页信息切割当前页数据
        int begin = (pageNum - 1) * pageSize;
        int end = pageNum * pageSize;
        // 判断list的大小是否在起始点的以上,并且判断是否比end大
        if ( list.size() > begin ) {
            if ( list.size() <= end ) {
                end = list.size();
            }
            list = list.subList(begin, end);
        }
    }
}

在看到这些if-else判断和三目运算符,瞬间想起来,Math运算类貌似提供了一些比较大小的函数,为何不使用一下呢,于是乎我确定优化一下分页的方法,

优化

Math.ceil() 向上取整来获取总页数
Math.min()获取最小值来判断截取数组的结束节点。

于是乎改造一下:

java 复制代码
@Setter
@Getter
public class PageTool<T> {
    /**
     * 当前页数
     */
    private int pageNum;
    /**
     * 每页的记录条数
     */
    private int pageSize;
    /**
     * 总记录数
     */
    private int total;
    /**
     * 总页数
     */
    private int pages;
    /**
     * 当前开始值
     */
    private int start;
    /**
     * 总记录数
     */
    private List<T> list;

    public PageTool(List<T> list) {
        this.total = list.size();
        this.list = list;
    }

    public void startPage(int pageNum, int pageSize) {
        // 1、获取总记录数和分页数
        this.pageNum = pageNum > 0 ? pageNum : 10;
        this.pageSize = pageSize > 0 ? pageNum : 1;
        this.pages = (int) Math.ceil( (double) this.total / pageSize);
        // 2、根据分页信息切割当前页数据
        int startIndex = (pageNum - 1) * pageSize;
        int endIndex = Math.min(pageNum * pageSize, list.size());
        list = list.subList(startIndex, endIndex);
    }
}

一个简单、人畜无害的工具类就诞生啦。

相关推荐
认真的酒窝2 小时前
自己动手开发编译器(十一)语义分析
java·开发语言
wbs_scy3 小时前
Linux C++ 高并发编程:线程池全链路深度解析,从原理到手撕实现
java·开发语言
JAVA面经实录9173 小时前
Linux 常用命令完整知识体系
java·linux·开发语言·汇编
Full Stack Developme5 小时前
Java LRU 与 LFU 算法及应用
java·开发语言·算法
程序员老油条7 小时前
WSL2 + Docker Desktop:Windows 下的完美 Java 开发环境
java·windows·docker·wsl2
shushangyun_8 小时前
2026智能采购商城系统选型指南:如何引领企业数字化采购升级
java·大数据·数据库·人工智能·机器学习
她说..8 小时前
Java 默认值设置方式
java·开发语言·后端·springboot
学渣超8 小时前
记一次分布式事务数据不一致的排查之旅:从超时到索引,层层剥茧
java·后端·架构
掉鱼的猫8 小时前
Agent Harness 实战指南:构建生产级 AI Agent 的"马具"框架
java·llm·aigc
带刺的坐椅9 小时前
Agent Harness 实战指南:构建生产级 AI Agent 的"马具"框架
java·ai·llm·agent·solon-ai