前言

在工作中难免会遇到,将组装的集合数据进行分页处理,现在我将自己手动分页的三种方法进行总结,有不对的地方敬请大家批评指正!

一、数据准备

  1. // 当前页
    int pageIndex = 1;
    // 页长
    int pageSize = 10;
  1. List<UserEntity> userList = new ArrayList<>();
  2. userList.add(UserEntity.builder().id(1).name("张三").sex(0).build());
  3. userList.add(UserEntity.builder().id(2).name("李四").sex(0).build());
  4. userList.add(UserEntity.builder().id(3).name("张三").sex(0).build());
  5. userList.add(UserEntity.builder().id(4).name("李四").sex(0).build());
  6. userList.add(UserEntity.builder().id(5).name("王五").sex(1).build());
  7. userList.add(UserEntity.builder().id(6).name("王麻子").sex(1).build());
  8. userList.add(UserEntity.builder().id(7).name("店小二").sex(1).build());
  9. userList.add(UserEntity.builder().id(8).name("王大锤").sex(1).build());
  10. userList.add(UserEntity.builder().id(9).name("小黑").sex(1).build());
  11. userList.add(UserEntity.builder().id(10).name("李思思").sex(0).build());
  12. userList.add(UserEntity.builder().id(11).name("张三丰").sex(1).build());
  13. userList.add(UserEntity.builder().id(12).name("尼古拉斯赵六").sex(1).build());
  14. userList.add(UserEntity.builder().id(13).name("赵老刘").sex(1).build());

二、利用 Lists.partition() 方法进行数据将数据切割分页

  1. List<UserEntity> resultList = new ArrayList<>();
         // 将数据按照传过来页长进行切割
  2. List<List<UserEntity>> partition = Lists.partition(userList,pageSize);
  3. for (int i = 0; i < partition.size(); i++) {
  4. if (i == pageIndex){
  5. resultList = partition.get(pageIndex);
  6. }
  7. }

三、利用封装的分页工具进行分页

(1)分页工具

  1. /**
  2. * @project
  3. * @Description 对List集合进行份分页
  4. * @Author songwp
  5. * @Date 2023/5/12 13:55
  6. **/
  7. public class ListPagingUtil {
  8. private Integer currentPage;//当前页
  9. private Integer pageSize;//每页显示记录条数
  10. private Integer totalPage;//总页数
  11. private Integer star;//开始数据
  12. private Integer total;//总条数
  13. private List<?> dataList;//每页显示的数据
  14.  
  15. public Integer getCurrentPage() {
  16. return currentPage;
  17. }
  18.  
  19. public void setCurrentPage(Integer currentPage) {
  20. this.currentPage = currentPage;
  21. }
  22.  
  23. public Integer getPageSize() {
  24. return pageSize;
  25. }
  26.  
  27. public void setPageSize(Integer pageSize) {
  28. this.pageSize = pageSize;
  29. }
  30.  
  31. public Integer getTotalPage() {
  32. return totalPage;
  33. }
  34.  
  35. public void setTotalPage(Integer totalPage) {
  36. this.totalPage = totalPage;
  37. }
  38.  
  39. public List<?> getDataList() {
  40. return dataList;
  41. }
  42.  
  43. public void setDataList(List<?> dataList) {
  44. this.dataList = dataList;
  45. }
  46.  
  47. public Integer getStar() {
  48. return star;
  49. }
  50.  
  51. public void setStar(Integer star) {
  52. this.star = star;
  53. }
  54.  
  55. public Integer getTotal() {
  56. return total;
  57. }
  58.  
  59. public void setTotal(Integer total) {
  60. this.total = total;
  61. }
  62.  
  63. @Override
  64. public String toString() {
  65. return "ListPagingUtil{" +
  66. "currentPage=" + currentPage +
  67. ", pageSize=" + pageSize +
  68. ", totalPage=" + totalPage +
  69. ", dataList=" + dataList +
  70. ", star=" + star +
  71. ", total=" + total +
  72. '}';
  73. }
  74.  
  75. public void pageStartInfo(Integer currentPage, Integer pageSize){
  76. //如果传入的pageNumber为null给pageNumber赋为1
  77. currentPage = currentPage == null ? 1 : currentPage;
  78. //如果传入的pageSize为null给pageSize赋为10
  79. pageSize = pageSize == null ? 10 : pageSize;
  80. this.setCurrentPage(currentPage);
  81. this.setPageSize(pageSize);
  82. }
  83.  
  84. public static ListPagingUtil paging(Integer currentPage, Integer pageSize, List<?> list) {
  85. ListPagingUtil pagingUtil = new ListPagingUtil();
  86. //初始化
  87. pagingUtil.pageStartInfo(currentPage, pageSize);
  88. //设置起始数据
  89. pagingUtil.setStar((pagingUtil.getCurrentPage()-1)*pagingUtil.getPageSize());
  90. //设置总数
  91. pagingUtil.setTotal(list.size());
  92. //设置总页数
  93. pagingUtil.setTotalPage(pagingUtil.getTotal() % pagingUtil.getPageSize() == 0 ? pagingUtil.getTotal()/pagingUtil.getPageSize() :pagingUtil.getTotal()/pagingUtil.getPageSize()+1);
  94. //截取list
  95. pagingUtil.setDataList(list.subList(pagingUtil.getStar(), pagingUtil.getTotal()-pagingUtil.getStar()>pagingUtil.getPageSize()?pagingUtil.getStar()+pagingUtil.getPageSize():pagingUtil.getTotal()));
  96. return pagingUtil;
  97. }
  98. }

(2)方法调用

  1. ListPagingUtil.paging(pageIndex,pageSize, userList)

四、利用 stream进行分页 处理

  1. List<UserEntity> collectList = userList.stream().skip((pageIndex - 1) * pageSize).limit(pageSize).collect(Collectors.toList());

List 集合手动分页的方法总结的更多相关文章

  1. Laravel手动分页的方法

    use Illuminate\Pagination\LengthAwarePaginator; public function index(Request $request){ $list =[... ...

  2. 关于laravel 得手动分页问题

    一般得分页,我们只需要使用paginate方法,就可以简单得搞定.但是遇到数组得组合情况呢?这个时候,就需要我们使用自定义分页了.首先我们看下laravel得分页方法源码: #vendor/larav ...

  3. Laravel 手动分页实现

    Laravel 手动分页实现 基于5.2版本 在开发过程中有这么一种情况,你请求Java api获取信息,由于信息较多,需要分页显示.Laravel官方提供了一个简单的方式paginate($perP ...

  4. List集合进行分页

    /** * @ClassName: Text2 * @Description: (集合的分页算法) * @author Luhan * @date 2017年3月16日 下午17:18:06*/pub ...

  5. jQuery EasyUI datagrid实现本地分页的方法

    http://www.codeweblog.com/jquery-easyui-datagrid%e5%ae%9e%e7%8e%b0%e6%9c%ac%e5%9c%b0%e5%88%86%e9%a1% ...

  6. Java进阶(二十四)Java List集合add与set方法原理简介

    Java List集合add与set方法原理简介 add方法 add方法用于向集合列表中添加对象. 语法1 用于在列表的尾部插入指定元素.如果List集合对象由于调用add方法而发生更改,则返回 tr ...

  7. 手动调用run方法和普通方法调用没有区别

    手动调用run方法和普通方法调用没有区别

  8. mysql分页优化方法

    mysql分页优化方法 今天遇到开发反应分页语句很慢,马上看一下到底是啥的分页语句 原分页语句 SELECT * FROM `tt` LIMIT , 执行这个语句需要6秒+时间 执行计划为全表扫描 在 ...

  9. Latex 算法过长 分页显示方法

    参考: Algorithm tag and page break Latex 算法过长 分页显示方法 1.引用algorithm包: 2.在\begin{document}前加上以下Latex代码: ...

  10. MySQL大数据量分页查询方法及其优化

    MySQL大数据量分页查询方法及其优化   ---方法1: 直接使用数据库提供的SQL语句---语句样式: MySQL中,可用如下方法: SELECT * FROM 表名称 LIMIT M,N---适 ...

随机推荐

  1. Rename a Local and Remote Git Branch

    Renaming Git Branch Follow the steps below to rename a Local and Remote Git Branch: 01 Start by swit ...

  2. python中的反射机制

    转自https://www.cnblogs.com/renjie1105/p/15909285.html python反射简介 在做程序开发中,我们常常会遇到这样的需求:需要执行对象里的某个方法,或需 ...

  3. 【LuckyFrame研究】下载安装包

    下载安装包,可以快速部署 百度网盘链接: https://pan.baidu.com/s/1SNUhzoKFgH2TRQN2Rx711A   提取码: u845 服务端压缩包 V3.X版本:Lucky ...

  4. IBM 双队列管理器,双向传输

    1. 建立队列管理器 建立[test01][test02]两个队列管理器,一直下一步即可,端口号不能一致(需要记住设置的端口号,后面会用到) [test01]端口号 1414 [test02]端口号 ...

  5. 使用shell 方式对 vcenter 进行补丁升级

    使用shell 方式对 vcenter 进行补丁升级 背景:最近VMware官网发布了最新的VMware vCenter Server 7.0 iso补丁文件,为了安全起故此对vCenter 进行安全 ...

  6. GO语言学习笔记-反射篇 Study for Go ! Chapter nine - Reflect

    持续更新 Go 语言学习进度中 ...... GO语言学习笔记-类型篇 Study for Go! Chapter one - Type - slowlydance2me - 博客园 (cnblogs ...

  7. Javaweb基础复习------JSON相关知识

    JSON(JavaScript对象表示法) 首先,我们需要知道的是,要使用json语法的话,就需要在Maven项目中导入相关的包,可以参考我之前发过的那个Maven导包那个网址,在里面找到这个页面: ...

  8. Spring Security 框架使用

    更多内容,前往IT-BLOG 一.Spring Security 简介 Spring Security 是一个能够为基于 Spring 的企业应用系统提供声明式的安全访问控制解决方案的安全框架.它提供 ...

  9. 在线调试工具 Arthas

    Arthas(阿尔萨斯) 是 Alibaba开源的一款 Java在线诊断工具,能够分析,诊断,定位Java应用问题,例如:JVM信息,线程信息,搜索类中的方法,跟踪代码执行,观测方法的入参和返回参数等 ...

  10. [ACM]TL-Kruskal

    #include<iostream> #include<cstdio> using namespace std; struct edge { int u; int v; int ...