list 拆分
- 目录
-
- 概述
- 设计思路
- 实现思路分析
-
- [1.list 拆分是](#1.list 拆分是)
- 2.用stream的parallel实现list的分批处理
- 3.使用stream的parallel实现list的分批处理
- 参考资料和推荐阅读
Survive by day and develop by night.
talk for import biz , show your perfect code,full busy,skip hardness,make a better result,wait for change,challenge Survive.
happy for hardess to solve denpendies.
目录
概述
list 拆分是一个常见的需求。
需求:
list 拆分是一个常见的需求。
设计思路
实现思路分析
1.list 拆分是
java
// 创建模拟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("数据不需要分批,直接进行业务逻辑处理!");
}
2.用stream的parallel实现list的分批处理
java
// 按每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);
3.使用stream的parallel实现list的分批处理
java
// 按每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);
参考资料和推荐阅读
参考资料
官方文档
开源社区
博客文章
书籍推荐
1.https://www.cnblogs.com/ChenQ2/p/16636306.html
2.https://www.cnblogs.com/ChenQ2/p/16636306.html
欢迎阅读,各位老铁,如果对你有帮助,点个赞加个关注呗!同时,期望各位大佬的批评指正~