对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);
        }

 

posted @   小诸葛先生  阅读(4222)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!
点击右上角即可分享
微信分享提示