将一个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.
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步