自定义分页工具类

前言

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

工具类

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

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

相关推荐
2301_771717219 分钟前
最近在刷牛客:使用Spring AOP实现性能监控时
java·后端·spring
华清远见成都中心32 分钟前
C 语言内存管理深度解析:malloc/free 与嵌入式堆栈分配策略
java·c语言·算法
YANZ22239 分钟前
亚马逊绿标(CPF):从环保认证到跨境流量新引擎
java·大数据·人工智能·搜索引擎·百度
超梦dasgg42 分钟前
智慧充电系统订单服务Java 实现方案
java·开发语言·微服务
JWASX1 小时前
【RocketMQ 生产者和消费者】- 事务源码分析(2)
java·rocketmq·java-rocketmq
手握风云-1 小时前
Spring AI:让大模型住进 Spring 生态(四)
java·后端·spring
南滑散修1 小时前
红黑树-非黑即红
java·开发语言
Java面试题总结1 小时前
Spring Boot:别再重复造轮子,这些内置功能香麻了
java·spring boot·后端
迷糊小白告1 小时前
Java微服务——SpringCloud
java·spring cloud·微服务
qq_269870431 小时前
java rabbitmq 队列在Springboot的设计
java·rabbitmq·java-rabbitmq