List集合拆分为多个List
2024-09-08 17:27:01
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);
最新文章
- 将 instance 连接到 first_local_net - 每天5分钟玩转 OpenStack(82)
- 用fasterjson需要注意的地方
- 利用JBoss漏洞拿webshell方法
- RAID讲解
- js_sl 分享
- 在win下面使用cdt+cygwin+cmake
- ASP.NET取得Request URL的各个部分
- c语言数组的操作
- ortp使用详解2
- inux xsel 拷贝复制命令行输出放在系统剪贴板上
- python作业day4计算器
- 一个简单的基于canvas小游戏
- ListView的操作模式的选择的更详细的解释CHOICE_MODE_MULTIPLE与CHOICE_MODE_MULTIPLE_MODAL
- Async/Await替代Promise的6个理由
- php环境和apache服务启动不的解决方法
- Mac Sublime text3 如何设置更加漂亮好用?
- 腾讯地图打开地图选取位置 withMap
- es7预览
- 理解 static (深入了解JAVA虚拟机)
- Nginx的安装和设置