BatchGetDataUtil.java 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. package cn.com.qmth.export;
  2. import java.util.ArrayList;
  3. import java.util.List;
  4. import org.apache.commons.collections4.CollectionUtils;
  5. /**
  6. * 多次批量获取数据
  7. * @author xiatian
  8. * @param <R> 结果类
  9. * @param <P> 参数类
  10. */
  11. public abstract class BatchGetDataUtil<R,P> {
  12. /**
  13. * @param resultList 全部结果集合
  14. * @param paramList 全部参数集合
  15. * @param batchSize 每批参数数量
  16. */
  17. public final List<R> getDataForBatch(List<P> paramList,int batchSize) {
  18. if(CollectionUtils.isEmpty(paramList)) {
  19. return null;
  20. }
  21. List<R> resultList=new ArrayList<>();
  22. if(paramList.size()<=batchSize) {
  23. List<R> temlist = getData(paramList);
  24. if(temlist!=null&&temlist.size()>0) {
  25. resultList.addAll(temlist);
  26. }
  27. }else {
  28. int size = paramList.size();
  29. int len=batchSize;
  30. int count = (size + len - 1) / len;
  31. for (int i = 0; i < count; i++) {
  32. List<P> subList = paramList.subList(i * len, ((i + 1) * len > size ? size : len * (i + 1)));
  33. List<R> temlist = getData(subList);
  34. if(temlist!=null&&temlist.size()>0) {
  35. resultList.addAll(temlist);
  36. }
  37. }
  38. }
  39. return resultList;
  40. }
  41. /**
  42. * 每批获取数据方法
  43. * @param <R>
  44. * @param <P>
  45. * @param paramList 获取每批数据时参数
  46. * @return
  47. */
  48. protected abstract List<R> getData(List<P> paramList);
  49. }