两种方式拆分:
第一种: 拆分成固定个数的list
/**
* 将一个list均分成n个list,主要通过偏移量来实现的
* @param source
* @return
*/
public static <T> List<List<T>> averageAssign(List<T> source,int n){
List<List<T>> result=new ArrayList<List<T>>();
int remaider=source.size()%n; //(先计算出余数)
int number=source.size()/n; //然后是商
int offset=0;//偏移量
for(int i=0;i<n;i++){
List<T> value=null;
if(remaider>0){
value=source.subList(i*number+offset, (i+1)*number+offset+1);
remaider--;
offset++;
}else{
value=source.subList(i*number+offset, (i+1)*number+offset);
}
result.add(value);
}
return result;
}
public static void main(String[] args) {
List<Integer> integers=new ArrayList<>();
integers.add(1);
integers.add(2);
integers.add(3);
integers.add(4);
integers.add(5);
integers.add(6);
List<List<Integer>> lists=averageAssign(integers, 2);
System.out.println(lists);
}
执行结果:[[1, 2, 3], [4, 5, 6]]
第二种,拆分成固定长度的list
/** * * @param list 要拆分的list * @param size 每次拆分的大小 * @param <T> * @return */ public <T> List<List<T>> split(List<T> list, int size){ if(list==null || list.size()==0){ return null; } // 获得数据总量 int count = list.size(); // 计算出要分成几个批次 int pageCount = (count / size) + (count % size == 0 ? 0 : 1); List<List<T>> temp = new ArrayList<>(pageCount); for (int i = 0, from = 0,to = 0; i < pageCount; i++) { from = i*size; to = from+size; // 如果超过总数量,则取到最后一个数的位置 to = to>count?count:to; // 对list 进行拆分 List<T> list1 = list.subList(from, to); // 将拆分后的list放入大List返回 temp.add(list1); // 也可以改造本方法,直接在此处做操作 } return temp; }
public static void main(String[] args) {
List<Integer> integers=new ArrayList<>();
integers.add(1);
integers.add(2);
integers.add(3);
integers.add(4);
integers.add(5);
integers.add(6);
List<List<Integer>> lists= split(integers, 2);
System.out.println(lists);
}
执行结果: [[1, 2], [3, 4], [5, 6]]