分批处理 Java list 集合

分批处理 Java list 集合

参考自:http://www.cnblogs.com/java666/p/4789597.html

import lombok.extern.slf4j.Slf4j;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

@Slf4j
public class TestServer {

    public static void main(String[] args) {
        List<String> list = new ArrayList<>(Arrays.asList("a","b","c","d","e","f","g","h","i"));
        //每次处理的记录条数
        Integer requestLimit = 2;
        Integer size = list.size();
        if(list.size()<=requestLimit){
            log.info("不需要分批");
            log.info("处理数据:{}",list);
            return;
        }
        Integer partCount = size/requestLimit;
        for (int i = 0; i < partCount; i++){
            log.info("第 {} 次,执行处理:",(i + 1));
            List<String> pageList = list.subList(0,requestLimit);
            log.info("处理数据:{}",pageList);
            list.subList(0,requestLimit).clear();
        }
        if (!list.isEmpty()) {
            log.info("最后一批处理");
            log.info("处理数据:{}",list);
        }
    }

}

执行结果

在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java集合批推送可以使用Java 8的Stream和Callable来实现。可以创建一个推送数据线程类PushDataTask,该类实现Callable接口,并重写call()方法。在call()方法中,可以通过查询数据库或其他方式获取需要推送的数据,并进行相应的处理。可以将数据成多个批次进行推送,每个批次的数据由一个PushDataTask线程负责推送。在推送过程中,可以根据推送结果更新推送标识。 以下是一个简单的示例代码,演示了如何使用Java 8的Stream和Callable来实现集合批推送: ``` import java.util.ArrayList; import java.util.List; import java.util.concurrent.*; class PushDataTask implements Callable<Integer> { private List<PushProcess> pushProcessList; public PushDataTask(List<PushProcess> pushProcessList) { this.pushProcessList = pushProcessList; } @Override public Integer call() throws Exception { int count = 0; for (PushProcess process : pushProcessList) { boolean isSuccess = pushUtil.sendRecord(process); if (isSuccess) { //推送成功 pushProcessMapper.updateFlagById(process.getId(), 1); count++; } else { //推送失败 pushProcessMapper.updateFlagById(process.getId(), 2); } } return count; } } // 批推送方法 public void batchPush(List<PushProcess> pushProcessList, int batchSize) { ExecutorService executorService = Executors.newFixedThreadPool(batchSize); List<Future<Integer>> futures = new ArrayList<>(); for (int i = 0; i < pushProcessList.size(); i += batchSize) { List<PushProcess> batchData = pushProcessList.subList(i, Math.min(i + batchSize, pushProcessList.size())); Callable<Integer> task = new PushDataTask(batchData); Future<Integer> future = executorService.submit(task); futures.add(future); } int totalCount = 0; for (Future<Integer> future : futures) { try { int count = future.get(); totalCount += count; } catch (InterruptedException | ExecutionException e) { e.printStackTrace(); } } executorService.shutdown(); System.out.println("总共推送成功:" + totalCount + "条数据"); } ``` 使用上述代码,可以将需要推送的数据列表pushProcessList进行批处理,每个批次的大小由参数batchSize指定。通过调用batchPush方法,即可实现集合批推送,并获得推送成功的总条数。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值