List集合拆分为多个List
List切分为多个List
使用SubList实现分批处理
// 创建模拟list List<Integer> dataList = new ArrayList<>(); for (int i = 1; i <= 22; i++) { dataList.add(i); } // 每批次数据记录数量 int partialLimit = 10; //判断是否有必要分批 if (partialLimit < dataList.size()) { //当前数据按限制条数可分为多少批次 int part = dataList.size()/partialLimit; List<Integer> partList; for (int i = 0; i < part; i++) { // 截取批次长度的list partList = dataList.subList(0, partialLimit); // 分批业务逻辑处理- 打印替代 System.out.println("分割出口的数据: "+partList); // 去除已经处理的部分 (Arrays.asList()方式生成的数据不能进行此修改操作,会报错) partList.clear(); System.out.println("剩余数据: "+dataList); } // 获取最后一次截取后的剩余列表数据 if (!dataList.isEmpty()) { // 业务逻辑数据处理, - 打印替代 System.out.println(dataList); } } else { System.out.println("数据不需要分批,直接进行业务逻辑处理!"); }
使用stream的parallel实现list的分批处理
// 按每5个一组分割 int partialLimit = 5; List<Integer> list = Arrays.asList(1, 2, 3, 4, 5, 6, 7,8,9,10); // 获取需要分割的次数,注意不能直接除以批次数量 int limit = (list.size()+partialLimit -1)/partialLimit; // 使用流遍历操作 List<List<Integer>> arrayList = new ArrayList<>(); Stream.iterate(0, n -> n + 1).limit(limit).forEach(i -> { arrayList.add(list.stream().skip((long) i * partialLimit).limit(partialLimit).collect(Collectors.toList())); }); System.out.println(arrayList);
使用stream的parallel实现list的分批处理
// 按每5个一组分割 int partialLimit = 5; List<Integer> list = Arrays.asList(1, 2, 3, 4, 5, 6, 7,8,9,10); // 获取需要分割的次数,注意不能直接除以批次数量,会丢失数据; int limit = (list.size()+partialLimit -1)/partialLimit; // 获取分割后的集合 List<List<Integer>> splitList = Stream.iterate(0, n -> n + 1).limit(limit).parallel() .map(a -> list.stream().skip((long) a * partialLimit).limit(partialLimit).parallel() .collect(Collectors.toList())).collect(Collectors.toList()); // 执行具体业务方法。打印代替 System.out.println(splitList);
手动循环添加新的list实现分批
// 创建模拟list List<Integer> intList = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10); // 分批的list List<Integer> partialList = new ArrayList(); // 分批的大小,每组5条 int partialDataLimit = 5; //分批处理判断 if(partialDataLimit < intList.size()) { // 开始对数据进行分批处理 for (int i = 0; i < intList.size(); i++) { partialList.add(intList.get(i)); // 达到批次数量后执行业务处理,在清空 if (partialDataLimit == partialList.size() || i == intList.size() - 1) { // 对分批list的具体业务处理 process(list) - 打印代替 System.out.println(partialList); // 清空分批list数据,再次循环分批处理 partialList.clear(); } } } else { System.out.println("未达到分批处理数据量,直接处理!"); }
使用apache 的 collection 工具提供方法实现lsit分批
-
maven
<dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-collections4</artifactId> <version>4.4</version> </dependency>
// 创建模拟list List<Integer> intList = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10); // 按5个每组进行分割 List<List<Integer>> subs = ListUtils.partition(intList, 5); // 对分批list的具体业务处理 process(list) - 打印代替 System.out.println(subs);
使用google guava 工具提供方法对List进行分割
-
maven
<dependency> <groupId>com.google.guava</groupId> <artifactId>guava</artifactId> <version>18.0</version> </dependency>
// 创建模拟list List<Integer> tempList = new ArrayList<>(); for (int i = 1; i <= 20; i++) { tempList.add(i); } //按每5个一组分割 List<List<Integer>> parts = Lists.partition(tempList, 5); // 对分批list的具体业务处理 process(list) - 打印代替 System.out.println(parts);
分类:
Java基础知识
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!