将 list 集合分割成指定大小的块

代码如下:

/**
	 * 将一个 list 集合, 分割成指定大小的"块"
	 * <p>
	 * 主要用于大数据量的入库
	 * 注: 此方法进行分割的 list 为只读状态, 不能进行其他操作
	 *
	 * @param list      原始 list 列表
	 * @param batchSize 指定每一"块"的数量
	 * @return
	 */
	public static <T> List<List<T>> subList(List<T> list, int batchSize) {
		//总数
		int len = list.size();
		if (batchSize == 0) {
			batchSize = 1;
		}
		//轮数
		int times = len / batchSize;
		//如果不能整除,则要多跑一轮
		if (len % batchSize != 0) {
			times++;
		}
		log.info("总共 {} 条记录, 分割为 {} 块", len, times);
		List<List<T>> resList = new ArrayList<>(times);
		int start = 1;
		int end = 1;

		for (int i = 1; i <= times; i++) {
			start = (i - 1) * batchSize;
			end = start + batchSize;
			//最后一轮数据未满
			if (end >= len) {
				end = len;
			}
			//子集为开区间[0,len)  =[0, len-1]
			List<T> subNewList = list.subList(start, end);
			resList.add(subNewList);
		}
		return resList;
	}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值