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;
posted @ 2023-05-12 15:55  奋--斗  阅读(1649)  评论(0编辑  收藏  举报