List 集合手動(dòng)分頁(yè)的方法總結(jié)
前言
在工作中難免會(huì)遇到,將組裝的集合數(shù)據(jù)進(jìn)行分頁(yè)處理,現(xiàn)在我將自己手動(dòng)分頁(yè)的三種方法進(jìn)行總結(jié),有不對(duì)的地方敬請(qǐng)大家批評(píng)指正!
一、數(shù)據(jù)準(zhǔn)備
// 當(dāng)前頁(yè)
int pageIndex = 1;
// 頁(yè)長(zhǎng)
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() 方法進(jìn)行數(shù)據(jù)將數(shù)據(jù)切割分頁(yè)
List<UserEntity> resultList = new ArrayList<>();
// 將數(shù)據(jù)按照傳過(guò)來(lái)頁(yè)長(zhǎng)進(jìn)行切割 List<List<UserEntity>> partition = Lists.partition(userList,pageSize); for (int i = 0; i < partition.size(); i++) { if (i == pageIndex){ resultList = partition.get(pageIndex); } }
三、利用封裝的分頁(yè)工具進(jìn)行分頁(yè)
(1)分頁(yè)工具
/** * @project * @Description 對(duì)List集合進(jìn)行份分頁(yè) * @Author songwp * @Date 2023/5/12 13:55 **/ public class ListPagingUtil { private Integer currentPage;//當(dāng)前頁(yè) private Integer pageSize;//每頁(yè)顯示記錄條數(shù) private Integer totalPage;//總頁(yè)數(shù) private Integer star;//開(kāi)始數(shù)據(jù) private Integer total;//總條數(shù) private List<?> dataList;//每頁(yè)顯示的數(shù)據(jù) 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); //設(shè)置起始數(shù)據(jù) pagingUtil.setStar((pagingUtil.getCurrentPage()-1)*pagingUtil.getPageSize()); //設(shè)置總數(shù) pagingUtil.setTotal(list.size()); //設(shè)置總頁(yè)數(shù) 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)方法調(diào)用
ListPagingUtil.paging(pageIndex,pageSize, userList)
四、利用 stream進(jìn)行分頁(yè) 處理
方法一:
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;
古今成大事者,不唯有超世之才,必有堅(jiān)韌不拔之志!

浙公網(wǎng)安備 33010602011771號(hào)