大集合按照指定长度进行分割成多个小集合,用于批量多次处理数据

目录

    • 拆分案例
    • 拆分的核心代码

        通常我们对集合的更新或者保存都需要用集合来承载通过插入的效率,但是这个会遇到一个问题就是你不知道那天那个集合的数量可能就超了,虽然我们连接数据库进行批量提交会在配置上配置allowMultiQueries=true,但是太长了也一样会会报错,这样我们就只能分批查询或者分批插入,需要把大集合拆分成小集合数据,希望接下来的案例可以帮到您。

拆分案例

    //大集合分割成小集合
    @Test
    public void sliceListTest(){
        List<Order> orderList = new ArrayList<>();
        //模拟需要查询出来的数据进行批量处理
        for (int i = 0; i < 10500; i++) {
            Order order = new Order();
            order.setId(System.currentTimeMillis());
            order.setOrderNo(UUID.randomUUID().toString());
            orderList.add(order);
        }
        //返回要求的小集合数据内容
        List<List<Order>> lists = sliceList(1000, orderList);
        for (List<Order> list : lists) {
            //小集合的数据
            List<Order> orders = list;
            //按照自己的业务处理逻辑,我这边就打印长度
            System.out.println(orders.size());
        }
    }

    /**
     * 集合拆分
     * @param batchSize 小集合的容量
     * @param list 大集合
     * @param  泛型
     * @return
     */
    public static <T> List<List<T>> sliceList(int batchSize, List<T> list) {
        List<List<T>> batches = new ArrayList<>();
        for (int i = 0; i < list.size(); i += batchSize) {
            int end = Math.min(i + batchSize, list.size());
            List<T> batch = list.subList(i, end);
            batches.add(batch);
        }
        return batches;
    }

大集合按照指定长度进行分割成多个小集合,用于批量多次处理数据_第1张图片

拆分的核心代码

核心代码 : 大集合分割成小集合,这里使用到泛型T,这样我们就可以把该方法提供成公共方法,由调用方决定把集合拆成多大。

    public static <T> List<List<T>> sliceList(int batchSize, List<T> list) {
        List<List<T>> batches = new ArrayList<>();
        for (int i = 0; i < list.size(); i += batchSize) {
            int end = Math.min(i + batchSize, list.size());
            List<T> batch = list.subList(i, end);
            batches.add(batch);
        }
        return batches;
    }

你可能感兴趣的:(Mybatis使用,java进阶,数据库,java,开发语言)