对List实现分页
一、背景
对于返回数据的分页,有时候不方便用PageHelper,考虑使用其它方法
二、需求
对于查询出的List进行分页
三、实现
本文中使用两种方法实现,
方法一,通过map分组:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | /** * 实现java 中 list集合中有几十万条数据,每pageSize条为一组取出 * @param list 可穿入几十万条数据的List * @return map 每一Kye中有pageSize条数据的List */ public static Map<String, Object> groupList(List list, Integer pageSize) { int listSize = list.size(); //用map存起来新的分组后数据 Map<String, Object> map = new HashMap<>(); int keyToken = 0 ; for ( int i = 0 ; i < list.size(); i += pageSize) { //作用为pageSize最后剩余几条newList中就装几条 if (i + pageSize > listSize) { pageSize = listSize - i; } List newList = list.subList(i, i + pageSize); map.put( "keyName" + keyToken, newList); keyToken++; } return map; } |
使用时,
Map<String, Object> groupList = groupList(bookList, pageSize);
for(Map.Entry<String,Object> entry:groupList.entrySet()){ //System.out.println(entry.getKey()+":"+entry.getValue()); //bookGroup为每个组数据
List<Book> bookGroup = (List<Book>) entry.getValue(); …… }
方法二,使用stream流优雅实现:
//计算总页数 int totalPage = msgList.size() / pageSize + (msgList.size() % pageSize == 0 ? 0 : 1); for (int i = 1; i <= totalPage; i++) { //忽略上一页,如果是第一页肯定不用忽略 int skipnum = pageSize * (i - 1); List<Integer> list= (List<Integer>) msgList.stream().skip(skipnum).limit(pageSize).collect(Collectors.toList()); System.out.println(list); }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!