將一個List拆分為n份的方法


public static void main(String[] args) {
        List<Integer> taskList = new ArrayList<>();
        for (int i = 1; i <= 52; i++) {
            taskList.add(i);
        }
        int total = taskList.size();
        int threadNum = 5;
        int remaider = total % threadNum; // 計算出余數
        int number = total / threadNum; // 計算出商
        int offset = 0;// 偏移量
        for (int i = 0; i < threadNum; i++) {
            if (remaider > 0) {
                List<Integer> subList = taskList.subList(i * number + offset, (i + 1) * number + offset + 1);
                remaider--;
                offset++;
                System.out.println(subList.get(0) + "--" + subList.get(subList.size() - 1));
            } else {
                List<Integer> subList = taskList.subList(i * number + offset, (i + 1) * number + offset);
                System.out.println(subList.get(0) + "--" + subList.get(subList.size() - 1));
            }
        }
    }

打印結果:

1--11
12--22
23--32
33--42
43--52

 

一種錯誤的寫法:

int page = 10;
int pageSize = (total + page - 1) / page;
for (int i = 1; i <= page; i++) {
  List<String> subList = list.subList((i - 1) * pageSize, i == page ? total : i * pageSize);
}

例如將6個分為5份,算得每一份size為2(其實只是最大的一份為2),這樣前3份就將數據分完了,到第4份就會報IndexOutOfBoundsException.


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM