1. 程式人生 > 其它 >對List實現分頁

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