List 集合手动分页的方法总结
前言
在工作中难免会遇到,将组装的集合数据进行分页处理,现在我将自己手动分页的三种方法进行总结,有不对的地方敬请大家批评指正!
一、数据准备
// 当前页
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 集合手动分页的方法总结的更多相关文章
- Laravel手动分页的方法
use Illuminate\Pagination\LengthAwarePaginator; public function index(Request $request){ $list =[... ...
- 关于laravel 得手动分页问题
一般得分页,我们只需要使用paginate方法,就可以简单得搞定.但是遇到数组得组合情况呢?这个时候,就需要我们使用自定义分页了.首先我们看下laravel得分页方法源码: #vendor/larav ...
- Laravel 手动分页实现
Laravel 手动分页实现 基于5.2版本 在开发过程中有这么一种情况,你请求Java api获取信息,由于信息较多,需要分页显示.Laravel官方提供了一个简单的方式paginate($perP ...
- List集合进行分页
/** * @ClassName: Text2 * @Description: (集合的分页算法) * @author Luhan * @date 2017年3月16日 下午17:18:06*/pub ...
- 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% ...
- Java进阶(二十四)Java List集合add与set方法原理简介
Java List集合add与set方法原理简介 add方法 add方法用于向集合列表中添加对象. 语法1 用于在列表的尾部插入指定元素.如果List集合对象由于调用add方法而发生更改,则返回 tr ...
- 手动调用run方法和普通方法调用没有区别
手动调用run方法和普通方法调用没有区别
- mysql分页优化方法
mysql分页优化方法 今天遇到开发反应分页语句很慢,马上看一下到底是啥的分页语句 原分页语句 SELECT * FROM `tt` LIMIT , 执行这个语句需要6秒+时间 执行计划为全表扫描 在 ...
- Latex 算法过长 分页显示方法
参考: Algorithm tag and page break Latex 算法过长 分页显示方法 1.引用algorithm包: 2.在\begin{document}前加上以下Latex代码: ...
- MySQL大数据量分页查询方法及其优化
MySQL大数据量分页查询方法及其优化 ---方法1: 直接使用数据库提供的SQL语句---语句样式: MySQL中,可用如下方法: SELECT * FROM 表名称 LIMIT M,N---适 ...
随机推荐
- 使用scrollIntoView 使某元素滚动到指定位置
var el = document.getElementById('A'); el.scrollIntoView('true'); 知识: element.scrollIntoView(); // 使 ...
- OpenStack组件说明
1.版本对应组件 2.Juno版本的核心组件
- flask动态csv接口——编码问题
@xxx_blueprint.route("/file", methods=["GET"]) def group_trend(): def generate() ...
- Linux shell usage()使用说明
usage()类似于执行文件-help展示的内容,即告诉使用者有哪些参数选项可供使用. usage()格式 点击查看代码 #!/bin/bash usage() { echo "Usage: ...
- 关于如何在IDEA里面配置好Git和Github的相关步骤详解
配置Git 1.File->settings 然后选择其中的Version Control: 接着选择其中的Git选项: 2.将文本框内容定位到本地下载git路径下面 然后点击右边的Test测试 ...
- 2020 ccpc秦皇岛 赛后总结!!!!
amazing!!!! 金牌!!!!! 总结一下这次的发挥,以及如何冲到了金牌. 1 有队友单开了银牌题,50分钟过了K题,当时只有5个人过K.他敲的过程中另个队友想出来另外一题的思路,等过了K,我直 ...
- urllib.parse的使用
urllib简介 urllib是pyhton自带的标准库用于网络请求库,无需安装,直接引用 通常用于爬虫开发,API(应用程序编程接口)数据获取和测试 urllib库的4大模块 urllib.requ ...
- NLP 开源形近字算法之相似字列表(番外篇)
创作目的 国内对于文本的相似度计算,开源的工具是比较丰富的. 但是对于两个汉字之间的相似度计算,国内基本一片空白.国内的参考的资料少的可怜,国外相关文档也是如此. 本项目旨在抛砖引玉,实现一个基本的相 ...
- 使用GithubAction自动构建部署项目
目录 1.1 项目准备 2.1 GithubAction设置 3.1 运行测试 4.1 小结 GitHub Actions 是一种持续集成和持续交付(CI/CD) 平台,可用于自动执行生成.测试和部署 ...
- vue中关于对象的监听与数组的监听
数组: 数组可监听到的方法:'push', 'pop', 'shift', 'unshift', 'splice', 'sort', 'reverse' 如果是根据索引改变值,需要使用vue.$set ...