All Downloads are FREE. Search and download functionalities are using the official Maven repository.

matrix.boot.common.utils.DataBatchUtil Maven / Gradle / Ivy

There is a newer version: 2.1.11
Show newest version
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);
    }
}