songweipeng

前言

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

一、数据准备

 // 当前页 
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());

相关文章: