package cn.com.qmth.examcloud.core.questions.service.util;

import java.util.List;

/**
 *	多次批量获取数据
 *	需重写getData方法
 * @author xiatian
 * @param <R> 结果类
 * @param <P> 参数类
 */
public  class BatchGetDataUtil<R,P> {
	/**
	 * @param resultList 全部结果集合
	 * @param paramList 全部参数集合
	 * @param batchSize 每批参数数量
	 */
	public final void getDataForBatch(List<R> resultList,List<P> paramList,int batchSize) {
		if(resultList==null||paramList==null||paramList.size()==0) {
			return;
		}
		if(paramList.size()<=batchSize) {
			List<R> temlist = getData(paramList);
			if(temlist!=null&&temlist.size()>0) {
				resultList.addAll(temlist);
			}
		}else {
			int size = paramList.size();
			int len=batchSize;
			int count = (size + len - 1) / len;

			for (int i = 0; i < count; i++) {
				List<P> subList = paramList.subList(i * len, ((i + 1) * len > size ? size : len * (i + 1)));
				List<R> temlist = getData(subList);
				if(temlist!=null&&temlist.size()>0) {
					resultList.addAll(temlist);
				}
			}
		}
	}
	/**
	 * 	Need Override
	 * 	每批获取数据方法
	 * @param <R>
	 * @param <P>
	 * @param paramList 获取每批数据时参数
	 * @return
	 */
	public  List<R> getData(List<P> paramList) {
		return null;
	}
}
