在项目开发的过程中,发现有很多业务,需要对一个大的集合做分批处理,于是利用函数式接口Consumer写了一个共通的处理方法,如下
/**
* 批处理共通方法
*
* @param list
* @param batchSize
* @param consumer
* @param <T>
*/
public static <T> void batchProcess(List<T> list, int batchSize, Consumer<List<T>> consumer) {
//计算分成了多少批次
int batchCount = (list.size() + batchSize - 1) / batchSize;
for (int i = 0; i < batchCount; i++) {
int startIndex = i * batchSize;
int endIndex = Math.min((i + 1) * batchSize, list.size());
List<T> batchList = list.subList(startIndex, endIndex);
consumer.accept(batchList);
}
}
调用方式
batchProcess(list, batchSize, batchList -> doSomething(batchList));
其中的doSomething是分批后的业务处理方法,自行修改