首页 > 其他分享 >List集合分组(大List分割成多个小List)

List集合分组(大List分割成多个小List)

时间:2023-05-18 18:32:00浏览次数:37  
标签:分割 int batchSize List 分组 集合 size

1.问题来源

有的时候我们需要将一个大的List集合分割成多个小的List集合以便进行操作。比如批量查询、新增、或者删除的时候,如果数量太大,可能会导致诸如sql语句过长、执行缓慢等问题。这个时候我们需要将一个大的List集合分割成多个小的List集合以便分开操作,可以有效提升执行效率。

2.集合分组

这里是将一个大的List集合分割成多个小的List集合的实现方法,代码如下:

	/**
	 * 分割List集合 将一个大的List集合分割成多个小的List集合
	 * 
	 * @param <T> 指定List的数据类型
	 * @param oldList 原始集合
	 * @param batchSize 设置每个小集合的长度
	 * @return 分割后的指定数据类型的数据集合,每个元素都是分割后的List集合
	 */
	public static <T> List<List<T>> splitList(List<T> oldList, int batchSize) {
		if (batchSize < 1) {
			return null;
		}
		List<List<T>> result = new ArrayList<>();
		int size = oldList.size();
		int count = (size + batchSize - 1) / batchSize;
		for (int i = 0; i < count; i++) {
			int fromIndex = i * batchSize;
			int toIndex = (i + 1) * batchSize > size ? size : (i + 1) * batchSize;
			List<T> subList = oldList.subList(fromIndex, toIndex);
			result.add(subList);
		}
		return result;
	}

3.测试

编写一个测试方法,来验证是否可行,方法如下:

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

		System.out.println("原始集合中的数据,共" + list.size() + "条信息:");
		System.out.println(list);
		System.out.println();

		// 分割List集合 将一个大的List集合分割成多个小的List集合
		List<List<String>> newList = splitList(list, 3);
		
		System.out.println("分割后的各个集合中的数据:");
		for (int i = 0, newListSiez = newList.size(); i < newListSiez; i++) {
			System.out.println("第" + (i + 1) + "个小集合中的数据,共" + newList.get(i).size() + "条:" + newList.get(i));
		}
	}

执行结果如下:

List集合分组(大List分割成多个小List)_java

4.完整工具类

import java.util.ArrayList;
import java.util.List;

/**
 * <h5>描述:List集合操作相关工具类</h5>
 * 
 */
public class ToolList {
	public static void main(String[] args) {
		List<String> list = new ArrayList<>();
		for (int i = 0; i < 16; i++) {
			list.add("数据" + (i + 1));
		}

		System.out.println("原始集合中的数据,共" + list.size() + "条信息:");
		System.out.println(list);
		System.out.println();

		// 分割List集合 将一个大的List集合分割成多个小的List集合
		List<List<String>> newList = splitList(list, 3);
		
		System.out.println("分割后的各个集合中的数据:");
		for (int i = 0, newListSiez = newList.size(); i < newListSiez; i++) {
			System.out.println("第" + (i + 1) + "个小集合中的数据,共" + newList.get(i).size() + "条:" + newList.get(i));
		}
	}

	/**
	 * 分割List集合 将一个大的List集合分割成多个小的List集合
	 * 
	 * @param <T> 指定List的数据类型
	 * @param oldList 原始集合
	 * @param batchSize 设置每个小集合的长度
	 * @return 分割后的指定数据类型的数据集合,每个元素都是分割后的List集合
	 */
	public static <T> List<List<T>> splitList(List<T> oldList, int batchSize) {
		if (batchSize < 1) {
			return null;
		}
		List<List<T>> result = new ArrayList<>();
		int size = oldList.size();
		int count = (size + batchSize - 1) / batchSize;
		for (int i = 0; i < count; i++) {
			int fromIndex = i * batchSize;
			int toIndex = (i + 1) * batchSize > size ? size : (i + 1) * batchSize;
			List<T> subList = oldList.subList(fromIndex, toIndex);
			result.add(subList);
		}
		return result;
	}
}

标签:分割,int,batchSize,List,分组,集合,size
From: https://blog.51cto.com/abcd/6306635

相关文章

  • .gitlab-ci.yml 语法错误导致 runner 报错“expected shallow list”
    报错信息:Runningwithgitlab-runner15.11.0(xxx)ongitrunnrxxx,systemID:s_xxxPreparingthe"shell"executor00:00Preparingenvironment00:00GettingsourcefromGitrepository00:01Fetchingchangeswithgitdepthsetto20...Reinitializ......
  • Java8 Stream --groupingBy 分组讲解
    本文主要讲解:Java8Stream之Collectors.groupingBy()分组示例Collectors.groupingBy()分组之常见用法功能代码:/***使用java8streamgroupingBy操作,按城市分组list*/publicvoidgroupingByCity(){Map<String,List<Employee>>map=employe......
  • table常用用具函数 - list用法
     table_listext.luafunctionlist.reset(listTb,val)fori=1,#listTbdolistTb[i]=valendendfunctionlist.castItemToNum(listTb)fori=1,#listTbdolistTb[i]=tonumber(listTb[i])endreturnlistTbendfunctionlis......
  • 37、list与Set区别
    (1)List简介实际上有两种List:一种是基本的ArrayList,其优点在于随机访问元素,另一种是LinkedList,它并不是为快速随机访问设计的,而是快速的插入或删除。ArrayList:由数组实现的List。允许对元素进行快速随机访问,但是向List中间插入与移除元素的速度很慢。LinkedList:对顺序访问进行了......
  • spring validation 分组手动校验
    定义两个分组接口GroupDefaultOne、GroupDefaultTwo,接口可以继承javax.validation.groups.Default类,也可以不继承。如果继承那么当校验分组的时候,会自动校验没有带分组的参数注解,如@NotNull(message="xxxx不能为Null")如果不继承那么当校验分组的时候,只会校验带了对应......
  • 基于前景和背景的图像分割,流行排序模型 MATLAB代码 将图像像素
    基于前景和背景的图像分割,流行排序模型MATLAB代码将图像像素分为前景类和背景类。基于图的流形排序模型的交互式图像分割框架,该模型是一种基于图的半监督学习技术,可以根据输入数据显示的内在结构学习非常光滑的函数。通过克服传统模型中图构造的两个核心问题:图的结构和图的边缘权......
  • 为什么阿里巴巴要求谨慎使用ArrayList中的subList方法
      https://baijiahao.baidu.com/s?id=1637211558024016793&wfr=spider&for=pc 集合是Java开发日常开发中经常会使用到的。在之前的一些文章中,我们介绍过一些关于使用集合类应该注意的事项,如《为什么阿里巴巴禁止在foreach循环里进行元素的remove/add操作》、《为......
  • Java中List集合的addAll方法的小坑
    Java中List集合的addAll方法的小坑遇到的问题已有一个封装类的ArrayList的集合,命名为firstList,现在需要把firstList中的值复制给另一个List,另一个List命名为secondList,然后对secondList中封装类元素中的属性赋值。然后在操作时发现,当使用set方法对secondList的封装类元素赋值时......
  • Java split方法一个或多个特殊字符分割
    publicstaticvoidmain(String[]args){ Strings="ab|cd|ef";//Strings="ab;cd,ef";//String[]split=s.split(";|,"); String[]split=s.split("\\|");// System.out.println(split[0]); for(in......
  • 【android】Android入门第六篇之ListView
    ListView是一个经常用到的控件,ListView里面的每个子项Item可以是一个字符串,也可以是一个组合控件。先说说ListView的实现:1.准备ListView要显示的数据 ;2.使用 一维或多维 动态数组 保存数据;3.构建适配器 , 简单地来说, 适配器就是 Item数组 , 动态数组 有多少元素就生成......