当前位置: 首页 > news >正文

自定义分页工具类

前言

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

工具类

第一版本:
@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()获取最小值来判断截取数组的结束节点。
于是乎改造一下:

@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);}
}

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

http://www.lryc.cn/news/121851.html

相关文章:

  • 文本数据保存
  • Python爬虫:抓取表情包的下载链接
  • (文章复现)基于灰狼算法(GWO)的交直流混合微网经济调度matlab代码
  • 【Kubernetes】Kubernetes的调度
  • 题目:2511.最多可以摧毁的敌人城堡数量
  • 22 | 书籍推荐数据分析
  • vscode extension 怎么区分dev prod
  • Java学习手册——第一篇Java简介
  • Prometheus流程图(自绘)-核心组件-流程详解
  • 回归模型常见评估指标mae,mse,rmse
  • 服务器数据恢复-断电导致ext4文件系统文件丢失的数据恢复案例
  • 链表(基础详解、实现、OJ笔试题)
  • W5100S-EVB-PICO作为TCP Client 进行数据回环测试(五)
  • 大数据-玩转数据-Redis 安装与使用
  • 实时指标-1日留存率
  • 【玩转23种Java设计模式】行为型模式篇:责任链模式
  • 【C#】获取电脑CPU、内存、屏幕、磁盘等信息
  • 途乐证券-最准确的KDJ改良指标?
  • 数据结构——线性表
  • SpringBoot系列之基于Jersey实现文件上传API
  • 【LangChain】Prompts之示例选择器
  • Neo4j之CREATE基础
  • Kali Hyper-V安装正常启动后 黑屏 只能进命令模式
  • 【人工智能124种任务大集合】-集齐了自然语言处理(NLP),计算机视觉(CV),语音识别,多模态等任务
  • IntelliJ IDEA快捷键大全
  • 阿里云轻量应用服务器_2核4G4M_2核2G3M_性能测评
  • 猿人学刷题系列(第一届比赛)——第二题( js 混淆 - 动态cookie 1)
  • ubuntu网络管理
  • 您可能并不需要单页应用程序
  • 基于低代码和数字孪生技术的电力运维平台设计