• 对List实现分页


    一、背景

    对于返回数据的分页,有时候不方便用PageHelper,考虑使用其它方法

    二、需求

    对于查询出的List进行分页

    三、实现

    本文中使用两种方法实现,

    方法一,通过map分组:

        /**
         * 实现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);
            }
  • 相关阅读:
    48音标
    business expressions(二)
    Pick up lines搭讪
    Greetings
    business expressions(一)
    analyzing problems
    business meeting
    idea缓存目录mac cache
    Sublime 3156 LICENSE key
    React从0到1
  • 原文地址:https://www.cnblogs.com/gezp/p/16330640.html
Copyright © 2020-2023  润新知