当前位置: 首页 > 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);}
}

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

相关文章:

自定义分页工具类

前言 在日常的开发工作中&#xff0c;会遇到很多不确定的需求场景&#xff0c;无法使用第三方提供的分页组件来实现&#xff0c;那么如何自己实现一个简单的分页工具类呢&#xff1f; 工具类 第一版本&#xff1a; Setter Getter public class PageTool<T> {/*** 当前…...

文本数据保存

文本数据保存 工具目的代码运行结果 工具 pycharm 目的 网址:https://ljgk.envsc.cn/ 需求&#xff1a;获取到地址&#xff08;address&#xff09;&#xff0c;公司名字&#xff08;ps_name&#xff09;&#xff0c;创建的时间&#xff08;create_time&#xff09;&#xff…...

Python爬虫:抓取表情包的下载链接

Python爬虫:抓取表情包的下载链接 1. 前言2. 具体实现3. 实现代码 1. 前言 最近发现了一个提供表情包的网址&#xff0c;觉得上面的内容不错&#xff0c;于是就考虑用Python爬虫获取上面表情包的下载链接。整体而言&#xff0c;实现这个挺简单的&#xff0c;就是找到提供表情包…...

(文章复现)基于灰狼算法(GWO)的交直流混合微网经济调度matlab代码

参考文献&#xff1a; [1]高瑜,黄森,陈刘鑫等.基于改进灰狼算法的并网交流微电网经济优化调度[J].科学技术与工程, 2020,20(28):11605-11611. [2]邓长征,冯朕,邱立等.基于混沌灰狼算法的交直流混合微网经济调度[J].电测与仪表, 2020, 57(04):99-107. 这两篇文章不管是从模型、…...

【Kubernetes】Kubernetes的调度

K8S调度 一、Kubernetes 调度1. Pod 调度介绍2. Pod 启动创建过程3. Kubernetes 的调度过程3.1 调度需要考虑的问题3.2 具体调度过程 二、影响kubernetes调度的因素1. nodeName2. nodeSelector3. 亲和性3.1 三种亲和性的区别3.2 键值运算关系3.3 节点亲和性3.4 Pod 亲和性3.5 P…...

题目:2511.最多可以摧毁的敌人城堡数量

​题目来源&#xff1a; leetcode题目&#xff0c;网址&#xff1a;2511. 最多可以摧毁的敌人城堡数目 - 力扣&#xff08;LeetCode&#xff09; 解题思路&#xff1a; 顺序遍历数组&#xff0c;记录上一个我军城堡和没有城堡的位置。当碰到空位置时&#xff0c;若上一次更新的…...

22 | 书籍推荐数据分析

import numpy as np import pandas as pd import seaborn as sns import matplotlib.pyplot as plt from sklearn.cluster import KMeans from sklearn import neighbors from sklearn.model_selection import train_test_split from sklearn.preprocessing import...

vscode extension 怎么区分dev prod

开发模式注入环境变量 使用vsode 提供的api...

Java学习手册——第一篇Java简介

今后Java学习手册就来给大家梳理JavaSE的基础知识啦&#xff0c; 除了这个专栏我们还有其他专栏&#xff1a;前端、安全、后端等。 希望大家可以在这里一起讨论学习哟~ Java学习手册——第一篇Java简介 1. Java基础知识2. Java能干嘛3. Java基础环境搭建 1. Java基础知识 出生…...

Prometheus流程图(自绘)-核心组件-流程详解

阿丹手绘流程图&#xff1a;图片可能有点小查看的时候放大看看哈&#xff01; prometheus核心组件 prometheus server Prometheus Server是Prometheus组件中的核心部分&#xff0c;负责实现对监控数据的获取&#xff0c;存储以及查询。Prometheus Server可以通过静态配置管理…...

回归模型常见评估指标mae,mse,rmse

文章目录 MAE(平均绝对误差)计算公式sklearn实现numpy实现mse(均方误差)计算公式sklearn实现numpy实现rmse(均方根误差)计算公式sklearn实现MAE(平均绝对误差) 计算公式 MAE ⁡ ( y ,...

服务器数据恢复-断电导致ext4文件系统文件丢失的数据恢复案例

服务器数据恢复环境&#xff1a; 一台服务器挂载一台存储设备&#xff0c;存储中划分一个Lun&#xff1b;服务器操作系统是Linux centos&#xff0c;EXT4文件系统。 服务器故障&分析&#xff1a; 意外断电导致服务器操作系统无法启动&#xff0c;系统在修复后可以正常启动&…...

链表(基础详解、实现、OJ笔试题)

文章目录 &#x1f9da;什么是链表&#xff08;链表概念及分类&#xff09;链表分类单链表和双链表的区别 &#x1f6b4;‍♂️单链表、双向链表的实现单链表的实现双向链表的实现 &#x1f349;链表经典OJ笔试题反转单链表移除链表元素合并两个有序链表链表分割链表的中间结点…...

W5100S-EVB-PICO作为TCP Client 进行数据回环测试(五)

前言 上一章我们用W5100S-EVB-PICO开发板通过DNS解析www.baidu.com&#xff08;百度域名&#xff09;成功得到其IP地址&#xff0c;那么本章我们将用我们的开发板作为客户端去连接服务器&#xff0c;并做数据回环测试&#xff1a;收到服务器发送的数据&#xff0c;并回传给服务…...

大数据-玩转数据-Redis 安装与使用

一、说明 大多数企业都是基于Linux服务器来部署项目&#xff0c;而且Redis官方也没有提供Windows版本的安装包。因此课程中我们会基于Linux系统来安装Redis. 此处选择的Linux版本为CentOS 7. Redis的官方网站地址&#xff1a;http://download.redis.io/releases 二、下载 m…...

实时指标-1日留存率

2个DWD层 登录→kafka注册→kafka1个DWS 弄2条流&#xff0c;从kafka读取数据将昨日注册数据存到状态中&#xff0c;TTL为2天&#xff0c;存到map状态中&#xff0c;key为注册日期&#xff0c;value为set&#xff0c;存储注册的uid将登录流和注册流进行连接来一条登录数据&…...

【玩转23种Java设计模式】行为型模式篇:责任链模式

软件设计模式&#xff08;Design pattern&#xff09;&#xff0c;又称设计模式&#xff0c;是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性、程序的重用性。 汇总目录链接&…...

【C#】获取电脑CPU、内存、屏幕、磁盘等信息

通过WMI类来获取电脑各种信息&#xff0c;参考文章&#xff1a;WMI_04_常见的WMI类的属性_wmi scsilogicalunit_fantongl的博客-CSDN博客 自己整理了获取电脑CPU、内存、屏幕、磁盘等信息的代码 #region 系统信息/// <summary>/// 电脑信息/// </summary>public p…...

途乐证券-最准确的KDJ改良指标?

KDJ目标是技术剖析的一种重要目标之一&#xff0c;它是利用随机目标&#xff08;%R&#xff09;发展而来的&#xff0c;是一种反映商场超买和超卖状况的买卖目标。KDJ目标由快线&#xff08;K线&#xff09;、慢线&#xff08;D线&#xff09;和随机值&#xff08;J线&#xff…...

数据结构——线性表

文章目录 线性表的定义和基本操作顺序表线性表的链式表示 线性表的定义和基本操作 线性表是具有相同数据类型的(n≥0)个数据元素的有限序列&#xff0c;其中n为表长&#xff0c;当n0时线性表是一个空表。若用L命名线性表&#xff0c;则其中一般表示为&#xff1a;L(a1,a2,a3, …...

PEG-HA-COOH-Fe₃O₄ NPs,聚乙二醇-透明质酸-羧基修饰四氧化三铁纳米颗粒,化学结构特点

PEG-HA-COOH-Fe₃O₄ NPs&#xff0c;聚乙二醇-透明质酸-羧基修饰四氧化三铁纳米颗粒&#xff0c;化学结构特点PEG-HA-COOH-Fe₃O₄ NPs是一类以四氧化三铁&#xff08;Fe₃O₄&#xff09;纳米颗粒为无机核心&#xff0c;在其表面依次构建透明质酸&#xff08;Hyaluronic acid…...

一站式IT运维管理平台:NeatLogic ITOM 15分钟快速上手终极指南

一站式IT运维管理平台&#xff1a;NeatLogic ITOM 15分钟快速上手终极指南 【免费下载链接】neatlogic-itom-all NeatLogic is a progressive ITOM platform offering ITOM solutions for users of various types and sizes. It includes features like ITSM, CMDB, continuous…...

不止于分词:用SpringBoot+HanLP 1.7.7快速构建一个简易文本分析服务

构建企业级文本分析服务&#xff1a;SpringBoot与HanLP深度整合实践 在数字化转型浪潮中&#xff0c;文本数据处理能力已成为企业智能化升级的基础设施。传统单机版NLP工具虽然功能强大&#xff0c;却难以满足分布式系统的调用需求。本文将展示如何将HanLP这一优秀的中文处理工…...

别再搞混了!Verilog里数组、向量和存储器的赋值与读写,新手避坑指南

Verilog数据存储结构深度解析&#xff1a;从位操作到存储器建模实战 刚接触Verilog的工程师常会被其灵活的数据存储结构所困扰——什么时候用向量&#xff1f;什么时候用数组&#xff1f;存储器又该如何正确建模&#xff1f;这些看似基础的概念一旦混淆&#xff0c;就会在仿真和…...

ESP32+LVGL8.1实战:用陀螺仪模拟编码器输入(附完整代码)

ESP32LVGL8.1实战&#xff1a;用陀螺仪模拟编码器输入&#xff08;附完整代码&#xff09; 在嵌入式界面开发中&#xff0c;输入控制方式往往决定了用户体验的流畅度。传统编码器虽然可靠&#xff0c;但体积和成本限制了其在小型设备中的应用。本文将展示如何利用ESP32内置的加…...

ELK Stack实战:构建高效企业日志分析平台

1. ELK Stack&#xff1a;企业日志管理的瑞士军刀 想象一下你管理着几十台服务器&#xff0c;每天产生的日志文件像雪片一样飞来。当系统出现故障时&#xff0c;你需要在海量日志中寻找那个关键的报错信息——这就像在干草堆里找一根针。这就是为什么越来越多的企业选择ELK St…...

Qwen2.5-VL 算法解析

Qwen2.5-VL 本质上是一个 Qwen2.5 LLM 原生动态分辨率 ViT 视觉到语言的 MLP 压缩器 面向图像/视频的时间对齐版 MRoPE 的统一多模态自回归模型。它相对 Qwen2-VL 的核心升级&#xff0c;不是简单“换了个更大的底座”&#xff0c;而是把 视觉编码效率、长视频时间建模、文档…...

别再死磕3D建图了!用Cartographer的2D模式搞定北科天汇32线雷达建导航图(附完整lua配置)

3D激光雷达的降维艺术&#xff1a;用Cartographer 2D模式高效构建导航地图 当32线激光雷达遇上Cartographer&#xff0c;大多数开发者第一反应是启用3D建图模式——毕竟硬件支持三维点云采集&#xff0c;软件也提供3D建图功能&#xff0c;这似乎是天经地义的选择。但实际项目中…...

2026年React Native热更新主流方案对比解析

2026年React Native热更新主流方案对比解析 在移动应用快速迭代的背景下&#xff0c;热更新已成为保障用户体验与业务敏捷的重要能力。对于采用React Native的跨平台项目而言&#xff0c;热更新不仅意味着无需发版即可修复缺陷或上线新功能&#xff0c;更直接影响研发效率、用户…...

FanControl终极指南:5分钟打造完美Windows风扇控制系统

FanControl终极指南&#xff1a;5分钟打造完美Windows风扇控制系统 【免费下载链接】FanControl.Releases This is the release repository for Fan Control, a highly customizable fan controlling software for Windows. 项目地址: https://gitcode.com/GitHub_Trending/f…...