• List集合Stream流转PageInfo或Page分页


    需要参数:
    1.PageNum当前页码;
    2.PageSize每页条数;
    3.dataList数据集合;
    代码如下:

     List<Map<String, Object>> finalList = dataList.stream()
                    .skip((pageIndex - 1) * pageSize)
                    .limit(pageSize)
                    .collect(Collectors.toList());
     //构建PageInfo对象
     PageInfo<Map<String, Object>> pageInfo = new PageInfo<>(finalList2);
            pageInfo.setTotal(dataList.size());
            pageInfo.setPageSize(pageSize);
            pageInfo.setPageNum(pageIndex);
     //根据自己前端的需要再set例如HasNextPage之类的参数
     //或利用后续工具类
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    优点在于可以同时保留原集合和分页集合,分页集合用于页面查询,原集合用于导出。

    public static <T> PageInfo<T> list2PageInfo(List<T> list ,Integer pageNum, Integer pageSize) {
            //java8 stream实现list分页
            List<T> pageList = list.stream().sorted().skip((pageNum - 1) * pageSize)
                    .limit(pageSize)
                    .collect(Collectors.toList());
            PageInfo<T> pageInfo = new PageInfo<T>(pageList);
            pageInfo.setTotal(list.size());
            int endRow = pageInfo.getEndRow() == 0 ? 0 : (pageNum - 1) * pageSize + pageInfo.getEndRow() + 1;
            pageInfo.setEndRow(endRow);
            boolean hasNextPage = list.size() <= pageSize * pageNum ? false : true;
            pageInfo.setHasNextPage(hasNextPage);
            boolean hasPreviousPage = pageNum == 1 ? false : true;
            pageInfo.setHasPreviousPage(hasPreviousPage);
            pageInfo.setIsFirstPage(!hasPreviousPage);
            boolean isLastPage = (list.size() > pageSize * (pageNum - 1) && list.size() <= pageSize * pageNum) ? true : false;
            pageInfo.setIsLastPage(isLastPage);
            int pages = list.size() % pageSize == 0 ? list.size() / pageSize : (list.size() / pageSize) + 1;
            pageInfo.setNavigateLastPage(pages);
            int[] navigatePageNums = new int[pages];
            for (int i = 1; i < pages; i++) {
                navigatePageNums[i - 1] = i;
            }
            pageInfo.setNavigatepageNums(navigatePageNums);
            int nextPage = pageNum < pages ? pageNum + 1 : 0;
            pageInfo.setNextPage(nextPage);
            pageInfo.setPageNum(pageNum);
            pageInfo.setPageSize(pageSize);
            pageInfo.setPages(pages);
            pageInfo.setPrePage(pageNum - 1);
            pageInfo.setSize(pageInfo.getList().size());
            int starRow = list.size() < pageSize * pageNum ? 1 + pageSize * (pageNum - 1) : 0;
            pageInfo.setStartRow(starRow);
            return pageInfo;
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
  • 相关阅读:
    Python操作Redis从入门到精通附代码(全)
    新人学习笔记之(变量)
    FFmpeg开发笔记(五十七)使用Media3的Transformer加工视频文件
    Python编程学习笔记
    【Linux常用命令12】搜索命令及特殊字符的使用
    springboot源码理解一、springboot源码环境搭建
    Kubernetes实战(一)-二进制部署Kubernetes集群
    stm32 用定时器的编码器模式来检测正反转
    Scala函数式编程
    即时分账系统对B2B电商业务的重要性?
  • 原文地址:https://blog.csdn.net/weixin_43620015/article/details/125635572