首页 > 其他分享 >jpa 分页工具类,把 list 转 page 的工具类

jpa 分页工具类,把 list 转 page 的工具类

时间:2023-08-03 22:02:10浏览次数:32  
标签:pageable jpa list int static import 工具 size

JpaPageUtils.java 工具类


import java.util.ArrayList;
import java.util.List;
import java.util.Optional;

import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageImpl;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Pageable;

public class JpaPageUtils {
	
	private static Integer defaultPageSize = 10;

	public static <T> Page<T> listToPage(List<T> list, int pageNo) {
		PageRequest pageable = PageRequest.of(pageNo - 1, defaultPageSize);
		return getPage(list, pageable);
	}
	
	public static <T> Page<T> listToPage(List<T> list, int pageNo, int pageSize) {
		PageRequest pageable = PageRequest.of(pageNo - 1, pageSize);
		return getPage(list, pageable);
	}
	
	public static <T> Page<T> getPage(List<T> list) {
		PageRequest pageable = PageRequest.of(0, defaultPageSize);
		return getPage(list, pageable);
	}

	public static <T> Page<T> getPage(List<T> list, Pageable pageable) {
		// 第n页起始值
		int pageStart = pageable.getPageNumber() * pageable.getPageSize();
		// 第n页期望结尾值
		int expectPageEnd = pageStart + pageable.getPageSize() - 1;
		return Optional.of(list.size()).filter(size -> size >= pageStart)
				.map(size -> getRealSubList(pageStart, expectPageEnd, list, pageable))
				.orElseGet(() -> getEmptySubList(list, pageable));
	}

	private static <T> PageImpl<T> getRealSubList(int pageStart, int expectPageEnd, List<T> list, Pageable pageable) {
		int realPageEnd = (list.size() > expectPageEnd) ? expectPageEnd + 1	: list.size();
		return new PageImpl<>(list.subList(pageStart, realPageEnd), pageable, list.size());
	}

	private static <T> PageImpl<T> getEmptySubList(List<T> list, Pageable pageable) {
		return new PageImpl<>(new ArrayList(), pageable, list.size());
	}

}



标签:pageable,jpa,list,int,static,import,工具,size
From: https://blog.51cto.com/lenglingx/6953691

相关文章

  • python 代码混淆工具汇总
    pyminifierPyminifierisaPythoncodeminifier,obfuscator,andcompressor.NoteForthelatest,completedocumentation:http://liftoff.github.io/pyminifier/Forthelatestcode:https://github.com/liftoff/pyminifierOverviewWhenyouinstallpyminifierit......
  • 网络工具示例
    如指定IP包长度大于100:tcpdump-ieth0-n'ip[2:2]>100'traceroute使用oot@zh-hz-hr-ygyradius~]#traceroute-I-p2000192.168.1.1tracerouteto192.168.1.1(192.168.1.1),30hopsmax,60bytepackets1gateway(192.168.3.250)3.987ms4.331......
  • 简述分布式链路追踪工具——Jaeger
    1、简介1.1Jaeger是什么Jaeger  是受到​ ​Dapper​​​和​ ​OpenZipkin​​​启发的由​ ​UberTechnologies​​作为开源发布的分布式跟踪系统,截止2023年8月3日最新稳定版本是1.47。其前端采用React语言实现,后端采用GO语言实现,适用于进行链路追踪,分布式跟踪消......
  • kube 小工具 java log
     importjava.io.BufferedInputStream;importjava.io.BufferedReader;importjava.io.IOException;importjava.io.InputStream;importjava.io.StringReader;importjava.util.ArrayList;importjava.util.LinkedHashMap;importjava.util.List;importjava.util.......
  • Git可视化工具——Gitkraken安装过程指南
    目录1、软件下载2、屏蔽自动更新2.1、host文件屏蔽更新2.1、删除更新程序3、启动应用1、软件下载Gitkraken最后一个免费版本为:6.5.1。后续的新版本本地私有库打开都为收费功能。可用的下载链接:平台文件名下载链接win-x86GitKrakenSetup-6.5.1-x86.exe下载win-x......
  • java 同一个对象之间赋值后添加入List中,属性值相互覆盖的问题解决方案
    1、for循环中NEW对象,因为List中存的是对象的引用地址。2、BeanUtils是属于spring框架下beans包下的工具类BeanUtils它提供了对java反射和自省API的包装。它里面还有很多工具类,这篇文章我们介绍一下copyProperties这个方法使用情景一般当我们有两个具有很多相同属性的JavaBean......
  • 【软件工具安装使用】boost的安装使用和交叉编译
    前言 一、编译安装 二、交叉编译安装注意空格;注意路径; 参考1. BoostC++Libraries;2. ubuntu22.04源码编译安装boost库_奇妙之二进制的博客-CSDN博客;3. Boost1.74.0交叉编译_hrx-@@的博客-CSDN博客;4. BoostGettingStartedonUnixVariants-1.82.0;5. Bo......
  • 【软件工具安装使用】opencv交叉编译
    前言 环境准备 编译配置 opencv交叉编译  opencv_contrib交叉编译 问题1. 对‘png_do_expand_palette_rgba8_neon’未定义的引用若出现3rdparty/lib/liblibpng.a(pngrtran.c.o):在函数‘png_do_read_transformations’中:pngrtran.c:(.text.png_do_read_transf......
  • 从0到1构建美团压测工具
    美团内部的RPC服务大多构建在Thrift之上,在日常开发服务的过程中,需要针对这些服务进行压力测试(以下简称压测)来发现潜在问题。常用的方法有:使用一些脚本语言如:Python、Ruby等,读取线上日志构建请求,用多线程模拟用户请求进行压测使用开源工具进行压测然而,无论采取哪种方法,压测都是一个......
  • 性能测试怎么做?测试工具怎么选择?
    在当前软件测试行业,熟练掌握性能测试已经是测试工程师们面试的敲门砖了,当然还有很多测试朋友们每天的工作更多的是点点点,性能方面可能也只是做过简单的并发测试,对于编写脚本,搭建环境方面也比较陌生。今天这篇文章就给大家梳理一下如何去做性能测试,和怎么熟练掌握性能测试。文章结构......