matrix.boot.common.utils.DataBatchUtil Maven / Gradle / Ivy
package matrix.boot.common.utils;
import matrix.boot.common.exception.ServiceException;
import org.apache.commons.collections4.CollectionUtils;
import java.util.ArrayList;
import java.util.List;
/**
* 数据分批处理器
* @author wangcheng
* 2021/8/12
**/
public class DataBatchUtil {
/**
* 分批处理数据
* @param data 原批处理数据
* @param size 每次批处理数量
* @param callBack 回调函数
* @param 传入参数类型
* @param 传出参数类型
* @return 传出参数集合
*/
public static List process(List data, int size, CallBack callBack) {
if (CollectionUtils.isEmpty(data)) {
return new ArrayList<>();
}
//获取配置文件
int batch = data.size() % size == 0 ? data.size() / size : ((data.size() / size) + 1);
//定义返回参数
List result = new ArrayList<>();
for (int i = 0; i < batch; i++) {
try {
List batchData = data.subList(i * size, Math.min((i + 1) * size, data.size()));
if (callBack != null) {
List list = callBack.invoke(batchData);
if (!CollectionUtils.isEmpty(list)) {
result.addAll(list);
}
}
} catch (Exception e) {
throw new ServiceException(e);
}
}
return result;
}
/**
* 回调
* @param
* @param
*/
@FunctionalInterface
public interface CallBack {
/**
* 调用函数
* @param batchData 批处理数据
* @return 处理后需要返回的值
*/
List invoke(List batchData);
}
}