自定义分页工具类

前言

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

工具类

第一版本:
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);
    }
}

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

相关推荐
高山上有一只小老虎5 分钟前
构造A+B
java·算法
学困昇7 分钟前
C++中的异常
android·java·c++
MC丶科21 分钟前
Java设计模式漫画英雄宇宙-工厂模式 —Factory博士的“超级英雄制造机”!
java·设计模式·漫画
虎子_layor31 分钟前
告别Redis瓶颈:Caffeine本地缓存优化实战指南
java·后端
q***985234 分钟前
什么是Spring Boot 应用开发?
java·spring boot·后端
带刺的坐椅34 分钟前
Solon AI 开发学习4 - chat - 模型实例的构建和简单调用
java·ai·chatgpt·solon
hadage23337 分钟前
--- JavaScript 的一些常用语法总结 ---
java·前端·javascript
懂得节能嘛.1 小时前
【Java动态线程池】Redis监控+动态调参
java·开发语言·redis
豆奶特浓61 小时前
Java面试模拟:当搞笑程序员谢飞机遇到电商秒杀与AIGC客服场景
java·spring boot·微服务·面试·aigc·高并发·电商
明洞日记1 小时前
【设计模式手册013】命令模式 - 请求封装的优雅之道
java·设计模式·命令模式