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分页内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • IDEAJavaWeb项目详解

    IDEAJavaWeb项目详解

    文章介绍了在IDEA Ultimate中创建Web项目并配置Tomcat服务器的步骤,包括添加框架支持、设置部署Artifact及运行测试,同时提醒社区版用户需确认版本差异以避免404错误
    2025-09-09
  • SpringBoot整合JWT实战教程

    SpringBoot整合JWT实战教程

    JWT(JSON Web Token)是一种用于身份验证和授权的开放标准(RFC 7519),它使用JSON格式传输信息,可以在不同系统之间安全地传递数据,这篇文章主要介绍了SpringBoot整合JWT实战教程,需要的朋友可以参考下
    2023-06-06
  • Java项目中实现使用traceId跟踪请求全流程日志

    Java项目中实现使用traceId跟踪请求全流程日志

    这篇文章主要介绍了Java项目中实现使用traceId跟踪请求全流程日志方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-08-08
  • 一文探究ArrayBlockQueue函数及应用场景

    一文探究ArrayBlockQueue函数及应用场景

    这篇文章主要为大家介绍了一文探究ArrayBlockQueue函数及应用场景,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-03-03
  • Mybatis中传递多个参数的4种方法总结

    Mybatis中传递多个参数的4种方法总结

    这篇文章主要给大家介绍了关于Mybatis中传递多个参数的4种方法,并且介绍了关于使用Mapper接口时参数传递方式,文中通过示例代码介绍的非常详细,需要的朋友可以参考借鉴,下面随着小编来一起学习学习吧。
    2018-04-04
  • springboot整合mybatis-plus基于注解实现一对一(一对多)查询功能

    springboot整合mybatis-plus基于注解实现一对一(一对多)查询功能

    这篇文章主要介绍了springboot整合mybatis-plus基于纯注解实现一对一(一对多)查询功能,因为本人采用的是spring-boot进行开发,本身springboot就提倡采用不用配置自动配置的方式,所以真心希望mybatis(不是mybatis-plus)这点需要继续努力
    2021-09-09
  • java实现高效的枚举元素集合示例

    java实现高效的枚举元素集合示例

    Set是Java集合类的重要组成部分,它用来存储不能重复的对象。枚举类型也要求其枚举元素各不相同。看起来枚举类型和集合是很相似的。然而枚举类型中的元素不能随意的增加、删除,作为集合而言,枚举类型非常不实用。EnumSet是专门为enum实现的集合类,本实例将演示其用法
    2014-03-03
  • RestTemplate使用Proxy代理作为跳板发送请求

    RestTemplate使用Proxy代理作为跳板发送请求

    这篇文章主要为大家介绍了RestTemplate使用代理proxy作为跳板发送请求的方法示例,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步
    2022-03-03
  • JAVA数字转中文大写两种实现代码

    JAVA数字转中文大写两种实现代码

    在Java程序实现数字金额转为大写中文金额,是一项非常常见的编程任务,这篇文章主要介绍了JAVA数字转中文大写两种实现方法的相关资料,文中通过代码介绍的非常详细,需要的朋友可以参考下,
    2025-07-07
  • Springboot把外部依赖包纳入Spring容器管理的两种方式

    Springboot把外部依赖包纳入Spring容器管理的两种方式

    这篇文章主要给大家介绍了Springboot把外部依赖包纳入Spring容器管理的两种方式,Spring.factories和org.springframework.boot.autoconfigure.AutoConfiguration.imports,有感兴趣的小伙伴可以参考阅读本文
    2023-07-07

最新评论