自定义分页工具类

前言

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

工具类

第一版本:
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 小时前
Spring Security+JWT+Redis实现项目级前后端分离认证授权
java·spring·bootstrap
427724003 小时前
IDEA使用git不提示账号密码登录,而是输入token问题解决
java·git·intellij-idea
chengooooooo4 小时前
苍穹外卖day8 地址上传 用户下单 订单支付
java·服务器·数据库
李长渊哦4 小时前
常用的 JVM 参数:配置与优化指南
java·jvm
计算机小白一个4 小时前
蓝桥杯 Java B 组之设计 LRU 缓存
java·算法·蓝桥杯
南宫生6 小时前
力扣每日一题【算法学习day.132】
java·学习·算法·leetcode
计算机毕设定制辅导-无忧学长7 小时前
Maven 基础环境搭建与配置(一)
java·maven
风与沙的较量丶8 小时前
Java中的局部变量和成员变量在内存中的位置
java·开发语言
m0_748251728 小时前
SpringBoot3 升级介绍
java
极客先躯9 小时前
说说高级java每日一道面试题-2025年2月13日-数据库篇-请说说 MySQL 数据库的锁 ?
java·数据库·mysql·数据库的锁·模式分·粒度分·属性分