如何对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次的循环处理数据
			}
			}
		
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值