我们在工作过程中,有时会对集合数据分批、分页处理,提供一个工具类,您可以指定分批数,返回一个分批集合,每批中包含需分配好的要执行数据集
import com.data.sync.dto.basic.EndLinkmanDto;
import com.framework.utils.StringUtil;
import java.util.ArrayList;
import java.util.List;
/**
* @author
*/
public class AssigningTaskUtil {
/**
* 指定要执行的任务,智能为任务分配执行元素
* @param list 需要处理的数据集合
* @param taskTotal 需要多少个任务处理数据集合
* @return
*/
public static <T> List<List<T>> assigningTask(List<T> list,int taskTotal){
List< List<T> > taskTotalList =new ArrayList<>();
//需要多少个任务执行
//int taskTotal = 3;
if(list.size()<taskTotal){
taskTotalList.add(list);
return taskTotalList;
}
//记录数
int total = list.size();
//每个任务平均多少条记录
int size = total / taskTotal;
//还剩余多
int surplus= total % taskTotal ;
//为每个任务分配记录
for (int i = 1; i <= taskTotal; i++) {
List<T> listCopy = new ArrayList<>();
listCopy.addAll(list.subList((i - 1) * size, i * size)) ;
taskTotalList.add(listCopy);
}
//为剩余记录分配任务
for (int i = 1; i <= surplus; i++) {
T o= list.get( taskTotal*size+(i-1) );
taskTotalList.get(i-1).add(o);
}
return taskTotalList;
}
public static void main(String[] args) {
List<List<EndLinkmanDto>> dtoList=new ArrayList<>();
List<EndLinkmanDto> list=new ArrayList<>();
EndLinkmanDto o1=new EndLinkmanDto();
EndLinkmanDto o2=new EndLinkmanDto();
EndLinkmanDto o3=new EndLinkmanDto();
EndLinkmanDto o4=new EndLinkmanDto();
EndLinkmanDto o5=new EndLinkmanDto();
o1.setCompanyName("111");
o2.setCompanyName("112");
o3.setCompanyName("113");
o4.setCompanyName("114");
o5.setCompanyName("115");
list.add(o1);
list.add(o2);
list.add(o3);
list.add(o4);
list.add(o5);
dtoList= assigningTask(list , 3);
System.out.println( StringUtil.convert2String(dtoList ));
}
}