把一个大的List集合拆分几个小的List集合方法

2019-12-27  本文已影响0人  majorty

背景:
项目中遇到根据项目id集合去别的系统,发网络请求拿数据。
但是如果一次性去获取,那边运算非常慢,会超时。
所以要分批次去拿数据(分页)。

方案一
 /**
     *  拆分集合
     *  @param <T>
     *  @param resList 要拆分的集合
     *  @param count 每个集合的元素个数
     *  @return 返回拆分后的各个集合
     **/
    public static <T> List<List<T>> split(List<T> resList, int count) {
        if (resList == null || count < 1){
            return null;
        }
        List<List<T>> ret = new ArrayList<List<T>>();
        int size = resList.size();
        if (size <= count) {
            // 数据量不足count指定的大小
            ret.add(resList);
        } else {
            int pre = size / count;
            int last = size % count;
            // 前面pre个集合,每个大小都是count个元素
            for (int i = 0; i < pre; i++) {
                List<T> itemList = new ArrayList<T>();
                for (int j = 0; j < count; j++) {
                    itemList.add(resList.get(i * count + j));
                }
                ret.add(itemList);
            }
            // last的进行处理
            if (last > 0) {
                List<T> itemList = new ArrayList<T>();
                for (int i = 0; i < last; i++) {
                    itemList.add(resList.get(pre * count + i));
                }
                ret.add(itemList);
            }
        }
        return ret;
    }

    /** 测试方法 */
    public static void main(String[] args) {
        List<String> resList = Arrays.asList("0", "1", "2", "3", "4", "5", "6",
                "7", "8", "9", "10", "11", "12", "13", "14", "15", "16", "17",
                "18", "19", "20", "21", "22", "23", "24", "25", "26", "27",
                "28", "29", "30", "31", "32", "33", "34", "35", "36", "37",
                "38", "39", "40", "41", "42", "43", "44", "45", "46", "47",
                "48", "49", "50", "51", "52", "53", "54", "55", "56", "57",
                "58", "59", "60", "61", "62", "63", "64", "65", "66", "67",
                "68", "69", "70", "71", "72", "73", "74", "75", "76", "77",
                "78", "79", "80", "81", "82", "83", "84", "85", "86", "87",
                "88", "89", "90", "91", "92", "93", "94", "95", "96", "97",
                "98","99","100");
        List<List<String>> ret = split(resList, 10);
        for (int i = 0; i < ret.size(); i++) {
            System.out.println(ret.get(i));
        }
       
    }
方案二
/** * @param args */
    public static void main(String[] args) {
        List<String> resList = Arrays.asList("0", "1", "2", "3", "4", "5", "6",
                "7", "8", "9", "10", "11", "12", "13", "14", "15", "16", "17",
                "18", "19", "20", "21", "22", "23", "24", "25", "26", "27",
                "28", "29", "30", "31", "32", "33", "34", "35", "36", "37",
                "38", "39", "40", "41", "42", "43", "44", "45", "46", "47",
                "48", "49", "50", "51", "52", "53", "54", "55", "56", "57",
                "58", "59", "60", "61", "62", "63", "64", "65", "66", "67",
                "68", "69", "70", "71", "72", "73", "74", "75", "76", "77",
                "78", "79", "80", "81", "82", "83", "84", "85", "86", "87",
                "88", "89", "90", "91", "92", "93", "94", "95", "96", "97",
                "98","99","100");
        resList = new ArrayList<>(resList);
        int pageSize = 5;
        while (!resList.isEmpty()){
            List<String> splitList = resList.subList(0, pageSize < resList.size() ? pageSize : resList.size());
            System.out.println("-----"+splitList);
            // 清除已使用过的数据
            splitList.clear();
        }
    }
上一篇下一篇

猜你喜欢

热点阅读