如何对list中的数据分批处理?

问题:List datas = new ArrayList<>;//这个list中有几百条数据,现在要对这个集合中的数据进行加工处理,一次性进行循环处理消耗内存太大,如何进行分批处理?
第一种写法:

  int size=100;
  int n=(datas.size()-1)/size+1;  //一次处理100条,循环几次
    for (int i = 0; i < n; i++) {  //循环几次100条
            //每100个订单进行分批处理,避免数据量过大,内存使用过多
            // TODO 还可以优化成多线程进行处理
            int s=i*size; //截取数据的开始数下标
            int e=(i+1)*size>datas.size()?datas.size():(i+1)*size;  //截取数据的末尾数下标
            List<BalanceAndPrepayReportVO> subList=datas.subList(s,e);
 		//对数据进行业务逻辑处理逻辑
      subList.stream().map(ServiceOrderVo::getSn).distinct.collect(Collectors.joining(","));
            }

第二种:

       int threadSize = 500;//每500条数据处理
		int remainder = list.size()%threadSize; //取余
		int threadNum  = 0; //循环次数
		if(remainder == 0){ //能和五百整除
			threadNum  = list.size()/threadSize;  //可以循环几次
		} else {
			threadNum  = list.size()/threadSize + 1;  //可以循环几次
		}
		
		for(int i=0;i<threadNum;i++){
			if(i == threadNum - 1){  //最后一次循环,处理的数据
				sList = list.subList(i*threadSize, list.size());
			} else {
				sList = list.subList(i*threadSize, (i+1)*threadSize);  //1至n-1次的循环处理数据
			}
			}
		
发布了57 篇原创文章 · 获赞 0 · 访问量 4562

猜你喜欢

转载自blog.csdn.net/Arry_Coding/article/details/103401605