前言

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

一、数据准备

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

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

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

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

(1)分页工具

/**
* @project
* @Description 对List集合进行份分页
* @Author songwp
* @Date 2023/5/12 13:55
**/
public class ListPagingUtil {
private Integer currentPage;//当前页
private Integer pageSize;//每页显示记录条数
private Integer totalPage;//总页数
private Integer star;//开始数据
private Integer total;//总条数
private List<?> dataList;//每页显示的数据 public Integer getCurrentPage() {
return currentPage;
} public void setCurrentPage(Integer currentPage) {
this.currentPage = currentPage;
} public Integer getPageSize() {
return pageSize;
} public void setPageSize(Integer pageSize) {
this.pageSize = pageSize;
} public Integer getTotalPage() {
return totalPage;
} public void setTotalPage(Integer totalPage) {
this.totalPage = totalPage;
} public List<?> getDataList() {
return dataList;
} public void setDataList(List<?> dataList) {
this.dataList = dataList;
} public Integer getStar() {
return star;
} public void setStar(Integer star) {
this.star = star;
} public Integer getTotal() {
return total;
} public void setTotal(Integer total) {
this.total = total;
} @Override
public String toString() {
return "ListPagingUtil{" +
"currentPage=" + currentPage +
", pageSize=" + pageSize +
", totalPage=" + totalPage +
", dataList=" + dataList +
", star=" + star +
", total=" + total +
'}';
} public void pageStartInfo(Integer currentPage, Integer pageSize){
//如果传入的pageNumber为null给pageNumber赋为1
currentPage = currentPage == null ? 1 : currentPage;
//如果传入的pageSize为null给pageSize赋为10
pageSize = pageSize == null ? 10 : pageSize;
this.setCurrentPage(currentPage);
this.setPageSize(pageSize);
} public static ListPagingUtil paging(Integer currentPage, Integer pageSize, List<?> list) {
ListPagingUtil pagingUtil = new ListPagingUtil();
//初始化
pagingUtil.pageStartInfo(currentPage, pageSize);
//设置起始数据
pagingUtil.setStar((pagingUtil.getCurrentPage()-1)*pagingUtil.getPageSize());
//设置总数
pagingUtil.setTotal(list.size());
//设置总页数
pagingUtil.setTotalPage(pagingUtil.getTotal() % pagingUtil.getPageSize() == 0 ? pagingUtil.getTotal()/pagingUtil.getPageSize() :pagingUtil.getTotal()/pagingUtil.getPageSize()+1);
//截取list
pagingUtil.setDataList(list.subList(pagingUtil.getStar(), pagingUtil.getTotal()-pagingUtil.getStar()>pagingUtil.getPageSize()?pagingUtil.getStar()+pagingUtil.getPageSize():pagingUtil.getTotal()));
return pagingUtil;
}
}

(2)方法调用

ListPagingUtil.paging(pageIndex,pageSize, userList)

四、利用 stream进行分页 处理

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. SQL 2019 卸载方法

    一.关闭服务 1.  win+r      services.msc   打开服务,关闭与SQL有关的服务内容. 二.卸载应用 1.win+r  control   打开控制面板---卸载程序---卸 ...

  3. C#开发微信

    C#开发微信门户及应用教程   C#开发微信门户及应用(1)--开始使用微信接口... 6 1.微信账号... 6 2.微信菜单定义... 7 3.接入微信的链接处理... 8 4.使用开发方式创建菜 ...

  4. ajax缓存和fiddler——http协议调试代理工具

    1.在ie9下,ajax请求可能会有缓存,需要在请求上一个随机数 如:Math.random(); 2.fiddler2 打开以后可以查看所有的http请求情况,也可以使用本地脚本代替要请求的js文件 ...

  5. Javaweb学习笔记第八弹

    继续MyBatis学习 SQL语句警告提示问题 产生原因:IDEA和数据库没有建立连接,不识别表的信息 解决方式:在IDEA中配置MySQL数据库连接 在IDEA的Maven项目中,如果想要直接通过I ...

  6. (原创)【B4A】一步一步入门07:EditText,文本框、密码框、键盘样式、提示文本(控件篇03)

    一.前言 本篇教程,我们来讲一下常用的控件:EditText(文本输入框). 本篇教程将会讲解文本框的基本使用,如:提示文本.密码文本.键盘样式等. 相信看完的你,一定会有所收获! 本文地址:http ...

  7. markdown空格缩进以及HTML空格实体

    参考链接:https://www.jianshu.com/p/31eade263e7a https://www.cnblogs.com/naixil/p/13193364.html

  8. UI/UE设计学习路线图(超详细)

    很多小伙伴认为ui设计很简单,就是用相关的软件设计制作图片.界面等.其实不然,UI设计融合了很多学科内容.要从一个完全没有基础的人成长为一个ui设计者,该如何学习呢?主要分为基础阶段和专业课程阶段,其 ...

  9. Chronicle Pro - 一款简单 Mac 理财规划师,管理你的的个人预算

    使用Chronicle追踪和支付账单,管理你的个人预算,这是一款简单的Mac理财规划师.获得通知,这样你就不会错过下一个付款截止日期;你再也不用付滞纳金了.把你所有的账单放在一起,计划.检查和分析它们 ...

  10. 当后端人员未提供接口,前端人员该怎么测试 --mock

    1.回顾 2.线上的mock http://rap2.taobao.org/ https://www.easy-mock.com/ 3.线上接口文档 Swagger https://swagger.i ...