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);
List集合拆分为多个List的更多相关文章
- Java-大集合拆分为指定大小的小集合
因为Oracle数据的in 最大允许1000 ,超过就会报错, 所以需要将集合拆分为多个集合进行处理. /** * 拆分集合 * @param <T> * @param resList 要 ...
- 利用linq的Take Skip方法解决 集合拆分的问题
public static void Main(string[] args) { List<string> list = new List<string>(); ; i < ...
- subList方法拆分集合问题
subList方法拆分集合问题 分享一个有意思的错误,先看代码 public static void main(String[] args) throws IllegalAccessException ...
- 函数式Android编程(II):Kotlin语言的集合操作
原文标题:Functional Android (II): Collection operations in Kotlin 原文链接:http://antonioleiva.com/collectio ...
- JAVA大集合数据分批次进行切割处理
今天遇到一个大集合里面的数据删除问题, 因为是一个大集合,如果同时传递到数据库,那么就会造成数据库压力 所以分批次的进行批量操作 其实 也可以采用多线程来处理或者多批次加多线程来处理都是可以的 下面的 ...
- 【Scala篇】--Scala中集合数组,list,set,map,元祖
一.前述 Scala在常用的集合的类别有数组,List,Set,Map,元祖. 二.具体实现 数组 1.创建数组 new Array[Int](10) 赋值:arr(0) = xxx Array[ ...
- Kotlin——高级篇(五):集合之常用操作符汇总
在上一篇文章Kotlin--高级篇(四):集合(Array.List.Set.Map)基础中讲解到了数组Array<T>.集合(List.Set.Map)的定义与初始化.但是由于篇幅的原因 ...
- 初识Kotlin之集合
Kotlin的集合是让我为之心动的地方,丰富的高阶函数帮助我们高效开发.今天介绍Kotlin的基础集合用法.获取集合元素的函数.过滤元素的函数.元素排序的函数.元素统计的函数.集合元素映射的函数.集合 ...
- List集合分组实现教程
封装一个方法,用一个Map来实现,这里是根据bean类的seq字段进行拆分的,分成好几个list private LinkedHashMap<String,List<HandleInfo& ...
- MongoDB学习笔记九:分片
分片(sharding)是指将数据拆分,将其分散存在不同的机器上的过程.有事也用分区(partitioning)来表示这个概念.将数据分散到不同的机器上,不需要功能强大的大型计算机既可以存储更多的数据 ...
随机推荐
- 编译报错,提示:This dependency was not found:* vue-editor-bridge
前端代码引入了: 1 import func from 'vue-editor-bridge'; 工具自动填充,导致引入上述JS去掉重新编译,问题解决
- 免杀之:Mimikatz 免杀过杀软,思路学习
免杀之:Mimikatz 免杀过杀软 目录 免杀之:Mimikatz 免杀过杀软 1 环境准备 2 处理过程 2.1 生成原始的Mimikatz程序 2.2 定位到代码或字符串上特征绕过 2.3 定位 ...
- TEMPO研究第一年影像学数据: 骨侵蚀修复几乎只出现在无关节肿胀或肿胀改善组
标签: TEMPO研究; 依那西普; 放射学进展; 类风湿关节炎 TEMPO研究第一年影像学数据: 骨侵蚀修复几乎只出现在无关节肿胀或肿胀改善组 EULAR2007. Abstract No: OP0 ...
- .net webapi+jwt demo
一.新建.net webapi程序 二.nuget包搜索jwt,点击安装 三.在model文件夹下建立三个主要类: public class AuthInfo { /// &l ...
- Linux操作命令(四) 1.which命令 2.whereis命令 3.locate命令
1.which命令 which 命令的作用是,在 PATH 变量指定的路径中搜索可执行文件的所在位置.它一般用来确认系统中是否安装了指定的软件 确认是否安装了 gcc:which gcc 查看 cd ...
- loj2839
除了 L 神 txdy 我还能说啥呢.(L 神把这题搬模拟赛了...) 即把每个 x 换成 ( 或 ),问是否能通过不多于一次区间反转(( 与 ) 交换)后合法. 考虑怎样的括号串是合法的. 假设左括 ...
- lg7335 [JRKSJ R1] 异或 题解
本题的标签中含有trie,但是这道题可以不用trie做. 考虑列出本题的dp方程:设\(f_{k,i}\)表示前\(i\)个数选了\(k\)段的答案,\(s_i\)为数组的前缀异或和 当不选择第\(i ...
- Python中的__new__()方法
1.__new__()至少要有一个参数cls,代表当前类,此参数在实例时由python解释器自动识别, 2.__new__()必须要有返回值,返回实例化出来的实例,这点在自己实现__new__时要特别 ...
- LinuxK8S集群搭建三(部署dashboard)
系统环境: CentOS 7 64位 准备工作: 通过虚拟机创建三台CentOS服务器,可参照之前的文章192.168.28.128 --master192.168.28.130 --node0119 ...
- Object.defineProperty(定义试添加json对象的属性)
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...