List 集合手动分页的方法总结

2023-06-20,,

前言

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

一、数据准备

 // 当前页 
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 集合手动分页的方法总结的相关教程结束。

《List 集合手动分页的方法总结.doc》

下载本文的Word格式文档,以方便收藏与打印。