java如何将大的集合拆分成指定大小的小集合
1、我们首先创建一个叫做ListDeal的工具类来完成这个需求

2、首先确定方法的返回值为List<List<T>>,方法的参数为List<T> resList,int count
T是泛型,resList是源集合,count是分割出来的小集合中每个集合所应包含的元素个数

3、首先该方法逻辑的第一部分,使用卫语句来防止源集合为null或者长度为0

4、方法的第二部分为创建一个结果集合ret,然后判断源集合的长度是否小于给定的参数count,如果小于直接将源集合放入结果集合ret中即可

5、第四部分为根据count对集合进行切割,注意如果切完之后还有剩余的元素,将其直接放入结果集ret中

6、接下去是完整的方法
/**
* 拆分集合
* @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;
}

7、因为最常用的集合为ArrayList,所以写了一个ArrayList的重载方法,方便直接使用
import java.util.ArrayList;
import java.util.List;
public class ListDeal {
/**
* 拆分集合
* @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;
}
/** 按指定大小,分隔集合,将集合按指定大小拆开
* @param <T>
* @param resList 要拆分的集合
* @param count 每个集合的元素个数
* @return 返回拆分后的各个集合
*/
public static ArrayList<List<String>> split(ArrayList<String> list, int len) {
if (list == null || list.size() == 0 || len < 1) {
return null;
}
ArrayList<List<String>> result = new ArrayList<List<String>>();
int size = list.size();
int count = (size + len - 1) / len;
for (int i = 0; i < count; i++) {
List<String> subList = list.subList(i * len, ((i + 1) * len > size ? size : len * (i + 1)));
result.add(subList);
}
return result;
}
}
