java list分批

对集合数据分次批量处理,防止数据IO突增带来问题。

一、使用apache commons包

1、引入jar包

            <dependency>
                <groupId>org.apache.commons</groupId>
                <artifactId>commons-collections4</artifactId>
                <version>4.4</version>
            </dependency>

2、代码

ListUtils.partition(list, size);

    public static void main(String[] args) {
        List<String> list = new ArrayList<>();
        for (int i = 0; i < 50; i++) {
            list.add("yzh" + i);
        }

        List<List<String>> partition = ListUtils.partition(list, 10);
        for (List<String> stringList : partition) {
            System.out.println(stringList);
        }
    }

执行结果:

[yzh0, yzh1, yzh2, yzh3, yzh4, yzh5, yzh6, yzh7, yzh8, yzh9]
[yzh10, yzh11, yzh12, yzh13, yzh14, yzh15, yzh16, yzh17, yzh18, yzh19]
[yzh20, yzh21, yzh22, yzh23, yzh24, yzh25, yzh26, yzh27, yzh28, yzh29]
[yzh30, yzh31, yzh32, yzh33, yzh34, yzh35, yzh36, yzh37, yzh38, yzh39]
[yzh40, yzh41, yzh42, yzh43, yzh44, yzh45, yzh46, yzh47, yzh48, yzh49]

  • 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、付费专栏及课程。

余额充值