Java中对list集合进行分页的四种方式介绍

 更新时间:2025年12月08日 09:43:59   作者:江湖搬运工  
这篇文章主要为大家详细介绍了Java中对list集合进行分页的四种方式,文中的示例代码讲解详细,具有一定的借鉴价值,感兴趣的小伙伴可以了解下

这篇文章主要为大家提供了四种在Java中对List进行分页处理的方法,包括计算总页数、获取子列表等操作,适用于数据量较大时的显示优化。大家可以根据自己的需要进行选择

方式一

public static  void fenye(List list,int pagesize){
    int totalcount=list.size();
    int pagecount=0;
    int m=totalcount%pagesize;
    if  (m>0){
        pagecount=totalcount/pagesize+1;
    }else{
        pagecount=totalcount/pagesize;
    }
    for(int i=1;i<=pagecount;i++){
        if (m==0){
            List<Integer> subList= list.subList((i-1)*pagesize,pagesize*(i));
            System.out.println(subList);
        }else{
            if (i==pagecount){
                List<Integer> subList= list.subList((i-1)*pagesize,totalcount);
                System.out.println(subList);
            }else{
                List<Integer> subList= list.subList((i-1)*pagesize,pagesize*(i));
                System.out.println(subList);
            }
        }
    }
}
List<Integer> list=new ArrayList<Integer>();
for(int i=1;i<52;i++){
    list.add(i);
}
fenye(list,10);

方式二

public <T> List<List<T>> splitList(List<T> list, int pageSize)
    {
        int listSize = list.size();
        int page = (listSize + (pageSize - 1)) / pageSize;


        List<List<T>> listArray = new ArrayList<List<T>>();
        for (int i = 0; i < page; i++)
        {
            List<T> subList = new ArrayList<T>();
            for (int j = 0; j < listSize; j++)
            {
                int pageIndex = ((j + 1) + (pageSize - 1)) / pageSize;
                if (pageIndex == (i + 1))
                {
                    subList.add(list.get(j));
                }
                if ((j + 1) == ((j + 1) * pageSize))
                {
                    break;
                }
            }
            listArray.add(subList);
        }
        return listArray;
    }

方式三

public SearchResult paging(List<T> list, int pageNumber, int pageSize) throws Exception{
        List<T> pageList = new ArrayList<T>();
        int currIdx = (pageNumber > 1 ? (pageNumber -1) * pageSize : 0);
        for (int i = 0; i < pageSize && i < list.size() - currIdx; i++){
            T listNew = list.get(currIdx + i);
            pageList.add(listNew);
        }
        SearchResult<T> searchResult = new SearchResult<T>();
        searchResult.setList(pageList);
        searchResult.setTotal(list.size());
        if (searchResult.getTotal()%pageSize == 0){
            searchResult.setPages((int)searchResult.getTotal()/pageSize);
        }else {
            searchResult.setPages((int)searchResult.getTotal()/pageSize + 1);
        }
        searchResult.setPageNum(pageNumber);
        searchResult.setPageSize(pageSize);
        searchResult.setSize(pageList.size());
        //是否是第一页
        if (pageNumber == 1){
            searchResult.setIsFirstPage(true);
        }else {
            searchResult.setIsFirstPage(false);
        }
        //是否是最后一页
        if ((searchResult.getTotal() - pageNumber*pageSize) > 0){
            searchResult.setIsLastPage(false);
        }else {
            searchResult.setIsLastPage(true);
        }
        return searchResult;
    }

方式四

List<Integer> list = new ArrayList<>();
        list.add(1);
        list.add(2);
        list.add(3);
        list.add(4);
        list.add(5);
        
        int page = 2;//相当于pageNo-------分页中的pi
        int count = 20;//相当于pageSize-------分页中的ps
        int size = list.size();
        int pageCount=size/count;
        int fromIndex = count * (page - 1);
        int toIndex = fromIndex + count;
        if (toIndex >= size) {
            toIndex = size;
        }
        if(page>pageCount+1){
            fromIndex=0;
            toIndex=0;
        }
        
        System.out.println(list.subList(fromIndex, toIndex));

例子

rckqMonthlyList为一个list
        if (rckqMonthlyList.size() <= 0) {
            map.put("totalPage", 1);
            map.put("pageIndex", 1);
            map.put("pageSize", query.getPs());
            map.put("totalRow", 0);
            map.put("hasNext", false);
            map.put("list", rckqMonthlyList);
            return new ApiResult().success(map);
        }
        //有数据时
        //计算总页数
        Integer totalPage = rckqMonthlyList.size() / query.getPs();
//        if (rckqMonthlyList.size() % query.getPs() > 0) {
//           totalPage++;
//        }
        int fromIndex = query.getPs() * (query.getPi() - 1);
        int toIndex = fromIndex + query.getPs();
        if (toIndex >= rckqMonthlyList.size()) {
            toIndex = rckqMonthlyList.size();
        }
        if(query.getPi()>totalPage+1){
            fromIndex=0;
            toIndex=0;
        }
        Boolean hasNext = query.getPi() != totalPage;
        map.put("totalPage", totalPage);
        map.put("pageIndex", query.getPi());
        map.put("pageSize", query.getPs());
        map.put("totalRow", rckqMonthlyList.size());
        map.put("hasNext", hasNext);
        map.put("list", rckqMonthlyList.subList(fromIndex,toIndex));
        return new ApiResult().success(map);

到此这篇关于Java中对list集合进行分页的四种方式介绍的文章就介绍到这了,更多相关Java list分页内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 教你如何用Eclipse创建一个Maven项目

    教你如何用Eclipse创建一个Maven项目

    这篇文章主要介绍了教你如何用Eclipse创建一个Maven项目,文中有非常详细的代码示例,对正在入门Java的小伙伴们是非常有帮助的哟,需要的朋友可以参考下
    2021-05-05
  • 解决idea中servlet报红问题

    解决idea中servlet报红问题

    这篇文章主要介绍了解决idea中servlet报红问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-04-04
  • 解决SpringCloud gateway网关配置MVC拦截器报错问题

    解决SpringCloud gateway网关配置MVC拦截器报错问题

    这篇文章主要介绍了解决SpringCloud gateway网关配置MVC拦截器报错问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2025-06-06
  • Java创建类模式_动力节点Java学院整理

    Java创建类模式_动力节点Java学院整理

    这篇文章主要为大家详细介绍了Java创建类模式的相关方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-08-08
  • springboot做代理分发服务+代理鉴权的实现过程

    springboot做代理分发服务+代理鉴权的实现过程

    这篇文章主要介绍了springboot做代理分发服务+代理鉴权的实现过程,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-01-01
  • 一篇文章带你深入了解Java基础

    一篇文章带你深入了解Java基础

    这篇文章主要给大家介绍了关于Java中方法使用的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-08-08
  • Servlet的线程安全问题

    Servlet的线程安全问题

    本文主要介绍了Servlet的线程安全问题,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-02-02
  • 解决IDEA报错Failed to start bean‘documentationPluginsBootstrapper‘问题

    解决IDEA报错Failed to start bean‘documentationPluginsBootstra

    这篇文章主要介绍了解决IDEA报错Failed to start bean‘documentationPluginsBootstrapper‘问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-07-07
  • java图像识别工具类(ImageRecognitionUtils)使用实例详解

    java图像识别工具类(ImageRecognitionUtils)使用实例详解

    这篇文章主要介绍了如何在Java中使用OpenCV进行图像识别,包括图像加载、预处理、分类、人脸检测和特征提取等步骤,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2025-01-01
  • 分布式难题ElasticSearch解决大数据量检索面试

    分布式难题ElasticSearch解决大数据量检索面试

    这篇文章主要为大家介绍了分布式面试难题,ElasticSearch解决大数据量检索的问题分析回答,让面试官无话可说,帮助大家实现面试开薪自由
    2022-03-03

最新评论