Java List集合分批处理

package com.example.demo;
import com.google.common.collect.Lists;
import java.util.ArrayList;
import java.util.List;

public class Test {

public static void main(String[] args) {
    List<Integer> list = new ArrayList<>();

      for (int i = 0; i < 1500; i++) {
            list.add(i);
      }

    newBatchProcessing(list);//谷歌工具包里的 Lists.partition
    oldBatchProcessing(list);//传统切割
}

public static void newBatchProcessing(List<Integer> numList) {

    List<List<Integer>> lists = Lists.partition(numList, 1000);
    for (List<Integer> list : lists) {
        System.out.println(list);//这里就可以分批对数据进行处理了
    }
}

/**
 * 传统方法分批
 */
public static void oldBatchProcessing(List<Integer> list){
    int listSize = list.size();
    int toIndex = 1000;
    for(int i = 0; i< list.size(); i += 1000){
        if(i + 1000 > listSize){//作用为toIndex最后没有900条数据则剩余几条newList中就装几条
            toIndex = listSize - i;
        }
        List<Integer> newList = list.subList(i, i + toIndex);
        //分批数据做具体处理
        System.out.println(newList);
    }
}
}

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
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方法,即可实现集合批推送,并获得推送成功的总条数。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值