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<List<CompanyStaffEquipStatisticVO>> partition = ListUtils.partition(result, param.getPageSize()); List<CompanyStaffEquipStatisticVO> companyStaffEquipStatisticVOS = param.getPageIndex() > partition.size() ? new ArrayList<>() : partition.get(param.getPageIndex() - 1); SafePageParam safePageParam = new SafePageParam(); safePageParam.setPage(true); safePageParam.setPageSize(param.getPageSize()); PageVO<CompanyStaffEquipStatisticVO> voResult = new PageVO<>(safePageParam, companyStaffEquipStatisticVOS, result.size()); if (param.getPageIndex()*param.getPageSize()<result.size()) { voResult.setHasNext(true); } return voResult;
方法二:
List<VendorExcelVO> resultVO = getVendorProjectListInfo(param); PageVO<VendorExcelVO> voPageVO = new PageVO<>(); List<VendorExcelVO> collectList = resultVO.stream().skip((param.getPageIndex() - 1) * param.getPageSize()).limit(param.getPageSize()).collect(Collectors.toList()); voPageVO.setPage(true); voPageVO.setPageSize(param.getPageSize()); voPageVO.setCount(resultVO.size()); voPageVO.setList(collectList); if (param.getPageIndex() * param.getPageSize() < resultVO.size()){ voPageVO.setHasNext(true); } return voPageVO;
古今成大事者,不唯有超世之才,必有坚韧不拔之志!