java List数组根据给定大小分割数组

简介: 在获取到很长的数组时,一次性处理数据量太大,需要分批处理,这就需要分批处理了。1、使用List的subList,封装方法2、google工具类型Lists的partition经测试个人推荐使用第一种方法,效率上快了10几倍,估计是因为没有重新生成数组的原因

2000元阿里云代金券免费领取,2核4G云服务器仅664元/3年,新老用户都有优惠,立即抢购>>>


阿里云采购季(云主机223元/3年)活动入口:请点击进入>>>,


阿里云学生服务器(9.5元/月)购买入口:请点击进入>>>,

直接上代码:
1、使用List的subList,封装方法
第一个方法是针对Integer的List
第二个方法是适合所有对象的,经测试第二个方法给第一个方法快很多,好像不用时间一样。

/*****
     * 
     * @param dataList
     * @return 如果输入的数据列表为空,则返回一个空的数组。如果传分割的大小小于或者等于0,则会将传的数组放在数组第一个元素返回
     */
    public static List<List<Integer>> myListPartition(List<Integer> dataList,int splitSize){
   
        if(dataList == null || dataList.isEmpty()) {
   
            return new ArrayList<>();
        }
        List<List<Integer>> resList = new ArrayList<>();
        if(splitSize <= 0) {
   
            resList.add(dataList);
            return resList;
        }
        int dataSize = dataList.size();
        for(int i=0;i<dataSize;i += splitSize) {
   
            int end = Math.min(i + splitSize, dataSize);
            resList.add(dataList.subList(i, end));
        }
        return resList;
    }
    /***
     * 
     * @param dataList
     * @param splitSize
     * @return 跟上面的方法一样,这里写一个通用类型的
     */
    public static <T> List<List<T>> myListPartitionFormat(List<T> dataList,int splitSize){
   
        if(dataList == null || dataList.isEmpty()) {
   
            return new ArrayList<>();
        }
        List<List<T>> resList = new ArrayList<>();
        if(splitSize <= 0) {
   
            resList.add(dataList);
            return resList;
        }
        int dataSize = dataList.size();
        for(int i=0;i<dataSize;i += splitSize) {
   
            int end = Math.min(i + splitSize, dataSize);
            resList.add(dataList.subList(i, end));
        }
        return resList;
    }

二、google工具类型Lists的partition
先导入架包

     <dependency>
        <groupId>com.google.guava</groupId>
        <artifactId>guava</artifactId>
        <version>21.0</version>
    </dependency>

使用:

import com.google.common.collect.Lists;
List<List<Integer>> resList1 = Lists.partition(testList, 33);

测试结果:
1万条数据:
//Integer
Time : 2.0
Size : 3031
//google
Time : 39.0
Size : 3031
//T
Time : 1.0
Size : 3031

相关文章
|
5天前
如何实现数组和 List 之间的转换?
如何实现数组和 List 之间的转换?
|
5天前
|
存储 Java 索引
【Java开发指南 | 第十六篇】Java数组及Arrays类
【Java开发指南 | 第十六篇】Java数组及Arrays类
10 3
|
5天前
|
存储 安全 算法
Java一分钟之-Java集合框架入门:List接口与ArrayList
【5月更文挑战第10天】本文介绍了Java集合框架中的`List`接口和`ArrayList`实现类。`List`是有序集合,支持元素重复并能按索引访问。核心方法包括添加、删除、获取和设置元素。`ArrayList`基于动态数组,提供高效随机访问和自动扩容,但非线程安全。文章讨论了三个常见问题:索引越界、遍历时修改集合和并发修改,并给出避免策略。通过示例代码展示了基本操作和安全遍历删除。理解并正确使用`List`和`ArrayList`能提升程序效率和稳定性。
11 0
|
5天前
|
存储 安全 Java
【JAVA基础篇教学】第八篇:Java中List详解说明
【JAVA基础篇教学】第八篇:Java中List详解说明
|
5天前
|
存储 安全 Java
Java容器类List、ArrayList、Vector及map、HashTable、HashMap
Java容器类List、ArrayList、Vector及map、HashTable、HashMap
|
5天前
|
Java 索引
Java中数组详解
Java中数组详解
45 19
|
5天前
|
Java
解析java中的数组
解析java中的数组
15 3
|
5天前
|
存储 安全 Java
Java一分钟之-数组的创建与遍历
【5月更文挑战第8天】本文介绍了Java中数组的基本概念、创建与遍历方法,强调了类型匹配和数组越界问题。示例展示了如何创建整数数组并初始化元素,同时提供了避免数组越界的策略。对于遍历,文章提到了for循环和增强型for循环,并给出了防止错误的建议,如正确声明类型、初始化数组、安全索引操作及使用合适的数据结构。遵循这些指导可帮助开发者有效管理Java数组并减少错误。
20 0
|
5天前
|
Java API
【亮剑】三种有效的方法来删除List中的重复元素Java的List
【4月更文挑战第30天】本文介绍了三种Java中删除List重复元素的方法:1) 使用HashSet,借助其不允许重复值的特性;2) 利用Java 8 Stream API的distinct()方法;3) 对自定义对象重写equals()和hashCode()。每种方法都附带了代码示例,帮助理解和应用。
|
3天前
|
Java 测试技术
Java多线程的一些基本例子
【5月更文挑战第17天】Java多线程允许并发执行任务。示例1展示创建并启动两个`MyThread`对象,各自独立打印&quot;Hello World&quot;。示例2的`CounterExample`中,两个线程(IncrementThread和DecrementThread)同步地增加和减少共享计数器,确保最终计数为零。这些例子展示了Java线程的基本用法,包括线程同步,还有如Executor框架和线程池等更复杂的用例。
10 0
http://www.vxiaotou.com