一、需求
把一个集合,拆分成多个size一样的集合,做批量插入更新或者删除操作。
二、工具类方法
/**
* 把集合拆分成多个集合
*/
public class BatchListUtil<E> {
/**
* 把list分成多个批次
* @param list 集合
* @param batchSize 批次大小
* @return Map<Integer,List<E>>
*/
public Map<Integer,List<E>> batchList(List<E> list, int batchSize){
Map<Integer,List<E>> itemMap = new HashMap<>();
itemMap.put(1, new ArrayList<E>());
for(E e : list){
List<E> batchList= itemMap.get(itemMap.size());
if(batchList.size() == batchSize){//当list满足批次数量,新建一个list存放后面的数据
batchList = new ArrayList<E>();
itemMap.put(itemMap.size()+1, batchList);
}
batchList.add(e);
}
return itemMap;
}
}
三、方法调用
/**
* 批量新增数据
* @param list 数据集合
*/
@Override
public void insertAll(List<Object> list) {
long start = System.currentTimeMillis();
if(list!=null && list.size()>0){
Map<Integer,List<Object>> itemMap = new BatchListUtil<Object>().batchList(list, 500);
//分批次更新
for(Integer i : itemMap.keySet()){
objectMapper.insertAll(itemMap.get(i));
}
}
System.out.println("本次插入共用时:"+ (System.currentTimeMillis()-start) );
}