/** * 拆分集合 * @param resList 需要拆分的集合 * @param subListLength 每个子集合的元素个数 * @return 返回拆分后的各个集合组成的列表 **/ public static <T> List<List<T>> split(List<T> resList, int subListLength) { if (CollectionUtils.isEmpty(resList) || subListLength <= 0) { return Lists.newArrayList(); } List<List<T>> ret = Lists.newArrayList(); int size = resList.size(); if (size <= subListLength) { // 数据量不足 subListLength 指定的大小 ret.add(resList); } else { int pre = size / subListLength; int last = size % subListLength; // 前面pre个集合,每个大小都是 subListLength 个元素 for (int i = 0; i < pre; i++) { List<T> itemList = Lists.newArrayList(); for (int j = 0; j < subListLength; j++) { itemList.add(resList.get(i * subListLength + j)); } ret.add(itemList); } // last的进行处理 if (last > 0) { List<T> itemList = Lists.newArrayList(); for (int i = 0; i < last; i++) { itemList.add(resList.get(pre * subListLength + i)); } ret.add(itemList); } } return ret; } public static void main(String[] args) { List<String> list = Lists.newArrayList(); int size = 1099; for (int i = 0; i < size; i++) { list.add("hello-" + i); } // 大集合里面包含多个小集合 List<List<String>> temps = split(list, 100); int j = 0; // 对大集合里面的每一个小集合进行操作 for (List<String> obj : temps) { System.out.println(String.format("row:%s -> size:%s,data:%s", ++j, obj.size(), obj)); } }
//方法二
public static <T> List<List<T>> splitList(List<T> list,int count) { if (list == null) { return null; } List<List<T>> lists = new ArrayList<>(); int num = list.size() / count; for (int i = 0; i <= num; i++) { if (i * count >= list.size()) { break; } if ((i + 1) * count > list.size()) { List<T> ts = list.subList(i * count, list.size()); lists.add(ts); break; } List<T> ts = list.subList(i * count, (i + 1) * count); lists.add(ts); } return lists; }