📚目录
- 拆分案例
- 拆分的核心代码
通常我们对集合的更新或者保存都需要用集合来承载通过插入的效率,但是这个会遇到一个问题就是你不知道那天那个集合的数量可能就超了,虽然我们连接数据库进行批量提交会在配置上配置allowMultiQueries=true,但是太长了也一样会会报错,这样我们就只能分批查询或者分批插入,需要把大集合拆分成小集合数据,希望接下来的案例可以帮到您。
拆分案例
//大集合分割成小集合
@Test
public void sliceListTest(){
List<Order> orderList = new ArrayList<>();
//模拟需要查询出来的数据进行批量处理
for (int i = 0; i < 10500; i++) {
Order order = new Order();
order.setId(System.currentTimeMillis());
order.setOrderNo(UUID.randomUUID().toString());
orderList.add(order);
}
//返回要求的小集合数据内容
List<List<Order>> lists = sliceList(1000, orderList);
for (List<Order> list : lists) {
//小集合的数据
List<Order> orders = list;
//按照自己的业务处理逻辑,我这边就打印长度
System.out.println(orders.size());
}
}
/**
* 集合拆分
* @param batchSize 小集合的容量
* @param list 大集合
* @param <T> 泛型
* @return
*/
public static <T> List<List<T>> sliceList(int batchSize, List<T> list) {
List<List<T>> batches = new ArrayList<>();
for (int i = 0; i < list.size(); i += batchSize) {
int end = Math.min(i + batchSize, list.size());
List<T> batch = list.subList(i, end);
batches.add(batch);
}
return batches;
}
拆分的核心代码
核心代码 : 大集合分割成小集合,这里使用到泛型T,这样我们就可以把该方法提供成公共方法,由调用方决定把集合拆成多大。
public static <T> List<List<T>> sliceList(int batchSize, List<T> list) {
List<List<T>> batches = new ArrayList<>();
for (int i = 0; i < list.size(); i += batchSize) {
int end = Math.min(i + batchSize, list.size());
List<T> batch = list.subList(i, end);
batches.add(batch);
}
return batches;
}