在后端开发时,查询结果返回的是list集合,而前端是要分页进行展示,这里就需要进行分页处理,以下介绍两种方法,供参考。
分页,处理好分页的参数:totalCount、pageSize 和 pageNo

1、方法一

拼接 PageData 数据结构所需参数,包括 总数 totalCount 、页码pageNo 、页大小 pageSize 、开始页 beginIndex 和 结束页 endIndex。

/**
* @param result
* @param query
*/
public static <T> PageData listToPageData(List<T> result, Query query) {PageData pageData = new PageData();if (CollectionUtils.isEmpty(result)) {pageData.setTotalCount(0);pageData.setPageNo(1);pageData.setPageSize(query.getPageSize());pageData.setItems(Collections.emptyList());return pageData;}// 分页各参数int totalCount = result.size();int pageNo = query.getPageNo();int pageSize = query.getPageSize();int beginIndex = (pageNo - 1) * pageSize;int endIndex = pageNo * pageSize - 1;// 赋值pageData.setTotalCount(totalCount);pageData.setPageNo(pageNo);pageData.setPageSize(pageSize);List<T> sublist;if (beginIndex >= totalCount) {sublist = Collections.emptyList();} else if (endIndex < totalCount) {sublist = result.subList(beginIndex, endIndex + 1);} else {sublist = result.subList(beginIndex, totalCount);         }pageData.setItems(sublist);        return pageData;    }
2、方法二

利用 java.util.List 的 subList 方法,从0开始,含头不含尾。

// 本质上是返回原来list的从[fromIndex, toIndex)之间的视图
List<T> subList(int fromIndex, int toIndex);
// 若list大小改变,则可以通过clear方法来恢复
list.subList(fromIndex, toIndex).clear();

分页实现的代码如下所示。

 /**
* @param result
* @param query
*/
public static <T> PageData listToPageData(List<T> result, Query query) {List<T> data = result.subList(query.getPageSize() * (query.getPageNo() - 1),result.size() > query.getPageSize() * query.getPageNo() ?query.getPageSize() * query.getPageNo() : result.size());PageData pageData = new PageData(data, result.size(), query.getPageNo(), query.getPageSize());return pageData;
}

任何对子列表的操作最终都会反映到原列表中,即list的大小可能会变化。

Java的两种分页实现相关推荐

  1. lucene的两种分页操作

    2019独角兽企业重金招聘Python工程师标准>>> lucene的两种分页操作 博客分类: 搜索引擎,爬虫 java 基于lucene的分页有两种: lucene3.5之前分页提 ...

  2. bootstrap layui 两种分页的实现

    最近做的项目中后台界面用的layui框架,前台界面用的是boostrap框架,这就导致我在做分页的过程中要考虑前台两种分页的动态实现,现在我已经爬出这个坑了,哈哈,给大家分享一下,写的不好的地方请大家 ...

  3. Java多线程两种实现方式的对比

    Java多线程两种实现方式的对比 一种,直接继承Thread类 一种,实现Thread类的Runnable接口 两种方式的区别 比如,售票厅有四个窗口,可以发售某日某次列出的100张车票,此时,100 ...

  4. java的两种运行方式Applet和Application你真的懂吗

    对两者的简介 他们是java的两种程序,能够独立运行的程序称为Java应用程序也包含我们正常写的java文件所生成的可执行程序(Application)其运行和普通的java文件相同.Java语言还有 ...

  5. SQL SERVER两种分页的存储过程介绍

    由于现在很多的企业招聘的笔试都会让来招聘的写一个分页的存储过程,有的企业甚至要求应聘者用两种方式实现分页,如果没有在实际项目中使用过分页,那么很多的应聘者都会出现一定的问题,下面介绍两种分页的方法. ...

  6. 十进制转二进制,用java的两种基本方法,适合新手

    十进制转二进制,用java的两种基本方法,适合新手 1.String字符串拼接法 package cn.sxt;import java.util.Scanner;/*** 6. 从键盘输入某个十进制整 ...

  7. java中两种异常类型_Java中的三种异常类型

    java中两种异常类型 Errors are the bane of users and programmers alike. Developers obviously don't want thei ...

  8. Java实现两种方式 RSA签名, RSA签名校验

    Java实现两种方式 RSA签名, RSA签名校验 通过 .keystore密钥文件实现 生成密钥文件 test2.keystore 相关使用 通过密钥生成器实现 Byte数据转换成 Hex字符串 相 ...

  9. 分析Java的两种数据类型

    一.Java的两种数据类型 1.基本数据类型:四类八种 整数型:byte short int long 浮点数型:float double 布尔型:boolean 字符型:char 2.引用数据类型: ...

最新文章

  1. Java面试通关要点汇总集之核心篇参考答案
  2. mysql docker 2003_解决远程连接mysql 报 2003错误的问题(docker)
  3. leetcode 64. 最小路径和
  4. php提交表单时判断 if($_POST[submit])与 if(isset($_POST[submit])) 的区别
  5. redis cluster搭建
  6. 程序员修神之路--分布式系统使用网关到底是好还是坏?
  7. 2个css特效冲突了怎么办_患上类风湿病怎么办?2个方法拿走不谢
  8. MAC电脑使用vue-cli脚手架搭建vue项目;mac使用脚手架vue-cli搭建vue项目
  9. 工作35:理解自定义组件
  10. conda安装特定版本的包
  11. 原创]Windows Gdi入门初级应用(VC SDK)
  12. redis怎么开启_关于Redis数据库入门必备的学习点
  13. linux系统安装花生壳
  14. 华为HCDA认证全套最新讲解视频教程(笔记)
  15. Delphi为什么都不用了?公司CTO不向老板推荐使用Delphi的13 个真实原因
  16. mysql聚簇索引和非聚簇索引的区别_聚簇索引与非聚簇索引的区别
  17. 短波红外成像技术与原理
  18. 系统日志Logrotate配置
  19. python调用AI百度开放平台API
  20. C#面向对象Chatbot智能版

热门文章

  1. 历史上康熙皇帝真的很喜欢微服私访吗?
  2. Eigenvalue and singular value
  3. Go入门-Go语言环境安装与GoLand第一个项目创建
  4. HTML学习内容的总结
  5. 关于人工智能不会使大脑变懒惰的议论文_台湾人工智能学校执行长陈升玮:孩子成为这型人,就不怕被AI取代...
  6. 协议和协议栈的区别?
  7. 深入浅出PaddlePaddle函数——paddle.ones_like
  8. Fiddler 微信小程序抓包
  9. 致初级软件开发人员并自勉
  10. 计算机组成原理的VDD与VCC