Java中将大list拆分成多个小list,分批操作

注意

1.拆分的list, 进行循环处理, 处理完, 使用list.clear(), 清空list里面的强引用对象, 让CG去回收失去引用的对象, 就能达到避免堆内存溢出的目的。

但是需要注意如果查询的时候, 一次性查出大约百万的数据, 在查询出来的时候, 已经把java内存撑爆了, 那么这个办法就不适用。

你应该优化的是MySQL的查询数据条数, 比如分页或加查询条件.

2.方法使用泛型, 支持自定义类型的入参

    /**
     * 将list拆分成指定数量的小list
     * 注: 使用的subList方式,返回的是list的内部类,不可做元素的删除,修改,添加操作
     * @param length 数量
     * @param list 大list
     */
    public List<List<T>> getSubList(int length, List<T> list){
        int size = list.size();
        int temp = size / length + 1;
        boolean result = size % length == 0;
        List<List<T>> subList = new ArrayList<>();
        for (int i = 0; i < temp; i++) {
            if (i == temp - 1) {
                if (result) {
                    break;
                }
                subList.add(list.subList(length * i, size)) ;
            } else {
                subList.add(list.subList(length * i, length * (i + 1))) ;
            }
        }
        return subList;
    }

使用示例:

//每5000条数据, 拆成一个list
List<List<RepayEntityVo>> repayEntityVoList = fileUtils.getSubList(5000, repayEntityVos);
  • 4
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值