Stream 大数据量List分批处理 java8

数据量大的 List中,如果要操作数据库 ,可以分批次,比如一次500的数据

 public static void main(String[] args) {

        //数据模拟
        List<ReceiptMethodIdAndNameBean> paperNoList = new ArrayList();
        for (int i = 0; i < 1000; i++) {
            ReceiptMethodIdAndNameBean selectItemBean = new ReceiptMethodIdAndNameBean();
            selectItemBean.setLockboxId(String.valueOf(i));
            paperNoList.add(selectItemBean);

        }

        //一次500条
        int number = 500;
        int limit = (paperNoList.size() + number - 1) / number;
        //分成limit次发请求到数据库,in()操作时   可以把多条数据分割成多组请求
        Stream.iterate(0, n -> n + 1).limit(limit).forEach(a -> {
            //获取后面1000条中的前500条
            // 拿到这个参数的流的 (a * applyIdSelectSize)后面的数据  .limit(applyIdSelectSize)->后面数据的500条  .collect(Collectors.toList()->组成一个toList
            List<ReceiptMethodIdAndNameBean> paperEntityList = paperNoList.stream().skip(a * number).limit(number).collect(Collectors.toList());
            //doSomething();  eg:数据库操作
            //举例分批输出
            for (ReceiptMethodIdAndNameBean receiptMethodIdAndNameBean : paperEntityList) {
                System.out.println(receiptMethodIdAndNameBean.getLockboxId());
            }
            System.out.println("======================================================");
        });

    }

使用google guava对List进行分割

 public static void main(String[] args) {

            //模拟模拟
            List<Integer> listDemo = Arrays.asList(1, 2, 3, 4, 5, 6, 7);

            List<List<Integer>> partition = Lists.partition(listDemo, 3);

            partition.stream().forEach(list -> {
                System.out.println("-------------------------");
                list.stream().forEach(a -> {
                    System.out.println(a);
                });
            });
        }

使用apache common collection

List<Integer> intList = Lists.newArrayList(1, 2, 3, 4, 5, 6, 7, 8);
List<List<Integer>> subs = ListUtils.partition(intList, 3);
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值