当前位置: 首页 > 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, …...

JDBC事务管理:确保数据一致性的关键技术

JDBC事务管理&#xff1a;确保数据一致性的关键技术 在Java编程的世界里&#xff0c;JDBC&#xff08;Java Database Connectivity&#xff09;作为连接Java应用程序与各种关系型数据库的桥梁&#xff0c;扮演着至关重要的角色。它提供了一套标准的API&#xff0c;使得开发者能…...

P13 | 异步任务:后台长时间操作的最佳实践

P13 | 异步任务:后台长时间操作的最佳实践 💰 付费文章 | 第二阶段:后端开发 为什么需要异步任务? 有些操作耗时很长,不适合同步等待: 操作 耗时 是否需要异步 查询列表 < 200ms ❌ 上传单张图片 1-3s ⚠️ 可选 批量生成 ZIP 打包下载 10s-5min ✅ 必须 AI 人脸识别…...

077_D11、卡车小镇.Trucktown.适合3-8岁资料网盘下载

D11、卡车小镇.Trucktown.适合3-8岁资料网盘下载 如果你正在寻找一份适合低龄儿童启蒙观看或亲子共学的英语类动画资源&#xff0c;那么 D11、卡车小镇.Trucktown.适合3-8岁资料网盘下载 这类内容通常会是很多家长关注的方向。尤其是在家庭英语启蒙、日常磨耳朵和兴趣培养场景…...

从零到一:在Ubuntu上搭建完整的GNU Radio Python开发环境

1. 环境准备&#xff1a;Ubuntu系统与基础工具 在开始搭建GNU Radio开发环境之前&#xff0c;我们需要确保系统基础环境已经就绪。我推荐使用Ubuntu 20.04 LTS版本&#xff0c;这个版本不仅长期支持&#xff0c;而且软件仓库中的GNU Radio和相关依赖都比较新且稳定。如果你还在…...

Sunshine游戏串流终极指南:15分钟打造你的跨设备游戏天堂

Sunshine游戏串流终极指南&#xff1a;15分钟打造你的跨设备游戏天堂 【免费下载链接】Sunshine Self-hosted game stream host for Moonlight. 项目地址: https://gitcode.com/GitHub_Trending/su/Sunshine Sunshine是一款开源的自托管游戏串流服务器&#xff0c;专为M…...

基于STM32LXXX的模数转换芯片ADC(SGM58031XMS10G/TR)驱动C程序设计

一、简介: SGM58031是一款低功耗、16位高精度Δ-Σ(ΔΣ)模数转换器(ADC),工作电压范围为3V至5.5V。 该器件集成片上参考电压源与振荡器,配备IC兼容接口并支持四个IC从设备址选择功能,滤波器数据采样率最高可达960SPS。内置PGA(电平调整器)可提供低至256mV的输入范围…...

【实战教程+数据集】YOLOv8车牌识别数据集7811张,从数据标注到模型部署,构建智慧交通车牌检测系统

1. 车牌识别技术为何需要YOLOv8&#xff1f; 车牌识别听起来简单&#xff0c;但实际落地时会遇到各种头疼的问题。我去年帮一个停车场做改造时就深有体会——白天阳光强烈时反光严重&#xff0c;傍晚逆光时车牌变成黑乎乎一片&#xff0c;下雨天水珠还会在车牌上形成光斑。传统…...

从D触发器到13进制计数器:一个同步时序电路的设计实践

1. 从零开始理解D触发器 第一次接触D触发器时&#xff0c;我完全被这个小小的数字元件搞懵了。直到在实验室里亲手搭建了一个简单的电路&#xff0c;才真正理解它的精妙之处。D触发器全称Data触发器&#xff0c;是数字电路设计中最基础的存储单元之一&#xff0c;也是我们构建1…...

HideMockLocation终极指南:5步快速隐藏Android模拟位置设置

HideMockLocation终极指南&#xff1a;5步快速隐藏Android模拟位置设置 【免费下载链接】HideMockLocation Xposed module to hide the mock location setting. 项目地址: https://gitcode.com/gh_mirrors/hi/HideMockLocation HideMockLocation是一款专为Android开发者…...

上海全屋定制工厂机构排名

在上海这座国际化大都市中&#xff0c;家居定制行业百花齐放&#xff0c;而上海尚岛伟奇全屋定制工厂&#xff08;简称"尚岛伟奇美学定制"&#xff09;凭借二十余年的行业积淀&#xff0c;已成为众多家庭值得信赖的家居定制选择。源起与发展&#xff1a;扎根上海&…...