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);

最新文章

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

热门文章

  1. 3D模型在线查看工具
  2. windows 10 更新代理
  3. vscode 设置默认模板
  4. CF1768F 题解
  5. Linux开发C++
  6. ABAP 写入批次特征值以及更新批次特征值
  7. Eclipse git提交代码 覆盖问题
  8. 真的,Web安全入门看这个就够了!
  9. vue 学习 css第四天
  10. python时间加减