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的更多相关文章

  1. Java-大集合拆分为指定大小的小集合

    因为Oracle数据的in 最大允许1000 ,超过就会报错, 所以需要将集合拆分为多个集合进行处理. /** * 拆分集合 * @param <T> * @param resList 要 ...

  2. 利用linq的Take Skip方法解决 集合拆分的问题

    public static void Main(string[] args) { List<string> list = new List<string>(); ; i < ...

  3. subList方法拆分集合问题

    subList方法拆分集合问题 分享一个有意思的错误,先看代码 public static void main(String[] args) throws IllegalAccessException ...

  4. 函数式Android编程(II):Kotlin语言的集合操作

    原文标题:Functional Android (II): Collection operations in Kotlin 原文链接:http://antonioleiva.com/collectio ...

  5. JAVA大集合数据分批次进行切割处理

    今天遇到一个大集合里面的数据删除问题, 因为是一个大集合,如果同时传递到数据库,那么就会造成数据库压力 所以分批次的进行批量操作 其实 也可以采用多线程来处理或者多批次加多线程来处理都是可以的 下面的 ...

  6. 【Scala篇】--Scala中集合数组,list,set,map,元祖

    一.前述 Scala在常用的集合的类别有数组,List,Set,Map,元祖. 二.具体实现 数组   1.创建数组 new Array[Int](10) 赋值:arr(0) = xxx Array[ ...

  7. Kotlin——高级篇(五):集合之常用操作符汇总

    在上一篇文章Kotlin--高级篇(四):集合(Array.List.Set.Map)基础中讲解到了数组Array<T>.集合(List.Set.Map)的定义与初始化.但是由于篇幅的原因 ...

  8. 初识Kotlin之集合

    Kotlin的集合是让我为之心动的地方,丰富的高阶函数帮助我们高效开发.今天介绍Kotlin的基础集合用法.获取集合元素的函数.过滤元素的函数.元素排序的函数.元素统计的函数.集合元素映射的函数.集合 ...

  9. List集合分组实现教程

    封装一个方法,用一个Map来实现,这里是根据bean类的seq字段进行拆分的,分成好几个list private LinkedHashMap<String,List<HandleInfo& ...

  10. MongoDB学习笔记九:分片

    分片(sharding)是指将数据拆分,将其分散存在不同的机器上的过程.有事也用分区(partitioning)来表示这个概念.将数据分散到不同的机器上,不需要功能强大的大型计算机既可以存储更多的数据 ...

随机推荐

  1. 使用 DirectSound 播放 WAV 文件

    使用 DirectSound 播放 WAV 文件 本文需要的前置知识可以在之前的这两篇文章找到. WAVE音频文件格式及其64位扩展格式的简要介绍 读写wav格式文件 基于本文介绍的方法,我们也可以用 ...

  2. vue3+element表格数据导出

    实现效果 导出后的效果: 步骤 第一步:安装依赖 npm install --save xlsx file-saver 第二步:给表格添加id,导出的时候需要用到 <!-- 导出按钮 --> ...

  3. PHY状态机分析

    PHY的12种状态 enum phy_state { PHY_DOWN = 0, //关闭网卡 PHY_STARTING, //PHY设备准备好了,PHY driver尚为准备好 PHY_READY, ...

  4. Vue急速入门-5

    vue-cli创建项目 前端工程化,项目>>>(vue-cli),创建处vue项目,单页面应用(spa) vue-cli创建项目开发,在项目中开发,最后上线,一定要编译 '纯粹的ht ...

  5. Protocol Buffers 3 学习

    一.定义消息 1.首先看一个简单的例子: 1 syntax = "proto3"; 2 3 message SearchRequest { 4 string query = 1; ...

  6. P3804 【模板】后缀自动机 (SAM) && P6139 【模板】广义后缀自动机(广义 SAM)

    普通 \(\text{SAM Code}\) #include <cstdio> #include <iostream> #include <cstring> #d ...

  7. linux nginx mysql php LNMP一键安装包

    官网: LNMP一键安装包 - CentOS/RadHat/Debian/Ubuntu下自动编译安装Nginx,PHP,MySQL,PHPMyAdmin 安装方法: centos 7.2安装 lnmp ...

  8. Vulhub 漏洞学习之:ECShop

    Vulhub 漏洞学习之:ECShop 目录 Vulhub 漏洞学习之:ECShop 1 ECShop 2.x/3.x SQL注入/远程命令执行漏洞 1.1 环境安装 1.2 漏洞产生原因 1.3 漏 ...

  9. Python连接Hadoop-impala方法

    from impala.dbapi import connectfrom impala.util import as_pandas连接方式 conn1= connect(host='xxx.xxx.x ...

  10. Gateway集成Netty服务

    目录 一.Netty简介 二.Netty入门案例 1.服务端启动 2.通道初始化 3.自定义处理器 4.测试请求 三.Gateway集成 1.依赖层级 2.自动化配置 四.配置加载 1.基础配置 2. ...