package list.split; import java.util.ArrayList; import java.util.List; public class ListSplit { public static void main(String[] args) { List<Integer> list = new ArrayList<>(); for (int i = 0; i < 17; i++) { list.add(i); } m1(list,3); System.out.println( m2(list,3)); } //直接在循环中处理数据 public static <T> void m1(List<T> list,int batchLen) { //实际处理数量 int num = 0; //原始集合 // List<Integer> list = new ArrayList<>(); System.out.println("应该处理数量:"+list.size()); //预计每批数量 // int batchLen = 3; //每批集合临时存储 List<T> batchlist = new ArrayList<>(); for (int i = 0; i < list.size(); i++) { T item = list.get(i); batchlist.add(item); if ((i+1) % batchLen == 0) { //对这批数据batchlist进行处理 todo num += batchlist.size(); System.out.println(num); System.out.println(batchlist); batchlist.clear();//处理完清空批次集合 } } //处理最后一批数据 if (batchlist.size()>0) { //对这批数据batchlist进行处理 todo num += batchlist.size(); System.out.println(batchlist); } System.out.println("实际处理数量:"+num); } //返回切割后的大集合 public static <T> List<List<T>> m2(List<T> list,int batchLen) { System.out.println("应该处理数量:"+list.size()); // 总的结果集合 List<List<T>> listGroup = new ArrayList<List<T>>(); //原始结合长度 int listSize = list.size(); if (listSize < batchLen) { listGroup.add(list); return listGroup; } // 子集合的长度 int toIndex = batchLen; for (int i = 0; i < listSize; i += batchLen) { if (i + batchLen > listSize) { toIndex = listSize - i; } List<T> newList = list.subList(i, i + toIndex); listGroup.add(newList); } return listGroup; } }