自定义分页工具类

前言

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

工具类

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

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

相关推荐
无名-CODING8 分钟前
Spring事务管理完全指南:从零到精通(上)
java·数据库·spring
fengxin_rou12 分钟前
【黑马点评实战篇|第一篇:基于Redis实现登录】
java·开发语言·数据库·redis·缓存
数智工坊22 分钟前
【数据结构-栈】3.1栈的顺序存储-链式存储
java·开发语言·数据结构
短剑重铸之日22 分钟前
《设计模式》第七篇:适配器模式
java·后端·设计模式·适配器模式
DFT计算杂谈36 分钟前
VASP+Wannier90 计算位移电流和二次谐波SHG
java·服务器·前端·python·算法
多多*38 分钟前
2月3日面试题整理 字节跳动后端开发相关
android·java·开发语言·网络·jvm·adb·c#
无名的小白1 小时前
openclaw使用nginx反代部署过程 与disconnected (1008): pairing required解决
java·前端·nginx
.ZGR.1 小时前
认识数据结构:图——无人机防空平台的“衍生品”
java·开发语言·数据结构
huidu011 小时前
基于AQS实现的ReentrantLock
java
冰敷逆向1 小时前
京东h5st纯算分析
java·前端·javascript·爬虫·安全·web