`
kanpiaoxue
  • 浏览: 1777504 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

java将大集合按照固定长度拆分为小集合

 
阅读更多

我们在使用java中的集合(Collection、List、Set等)的时候,可能因为某种限制需要将大集合按照固定的长度拆分为N个小的集合。

如:有一个List<String> list 里面有1099个原始,我需要按照固定长度50,来拆分这个集合为很多小集合,每个集合的原始是50个元素,可能最后一个小集合的长度不到50.

如何做呢?网上有不少资料,代码如下:

 

    /**
     * 拆分集合
     * 
     * @param <T> 泛型对象
     * @param resList 需要拆分的集合
     * @param subListLength 每个子集合的元素个数
     * @return 返回拆分后的各个集合组成的列表
     * 代码里面用到了guava和common的结合工具类
     **/
    public static <T> List<List<T>> split(List<T> resList, int subListLength) {
        if (CollectionUtils.isEmpty(resList) || subListLength <= 0) {
            return Lists.newArrayList();
        }
        List<List<T>> ret = Lists.newArrayList();
        int size = resList.size();
        if (size <= subListLength) {
            // 数据量不足 subListLength 指定的大小
            ret.add(resList);
        } else {
            int pre = size / subListLength;
            int last = size % subListLength;
            // 前面pre个集合,每个大小都是 subListLength 个元素
            for (int i = 0; i < pre; i++) {
                List<T> itemList = Lists.newArrayList();
                for (int j = 0; j < subListLength; j++) {
                    itemList.add(resList.get(i * subListLength + j));
                }
                ret.add(itemList);
            }
            // last的进行处理
            if (last > 0) {
                List<T> itemList = Lists.newArrayList();
                for (int i = 0; i < last; i++) {
                    itemList.add(resList.get(pre * subListLength + i));
                }
                ret.add(itemList);
            }
        }
        return ret;
    }

// 运行代码
public static void main(String[] args) {
    List<String> list = Lists.newArrayList();
    int size = 1099;
    for (int i = 0; i < size; i++) {
        list.add("hello-" + i);
    }

    List<List<String>> temps = split(list, 6);
    int j = 0;
    for (List<String> obj : temps) {
        System.out.println(String.format("row:%s -> size:%s,data:%s", ++j, obj.size(), obj));
    }
}

  其实我平日用的更多的是guava框架,它自带了一个方法可以实现上面的集合切割的功能。代码如下:

 

public static void main(String[] args) {
    List<String> list = Lists.newArrayList();
    int size = 1099;
    for (int i = 0; i < size; i++) {
        list.add("hello-" + i);
    }
    // 切割大集合到指定的长度:11
    List<List<String>> rsList = Lists.partition(list, 11);
    int i = 0;
    for (List<String> obj : rsList) {
        System.out.println(String.format("row:%s -> size:%s,data:%s", ++i, obj.size(), obj));
    }
}

 推荐大家使用guava的功能,它们都是经过严格的单元测试的代码。

分享到:
评论

相关推荐

    java实现把一个List集合拆分成多个的操作

    然而,如果需要将一个大集合按照固定的长度拆分为多个小集合,我们可以使用另一种方法。这里提供了一个通用的`split`方法,它接受一个任意类型泛型的List和一个整数参数,表示每个子集合的长度: ```java public ...

    工具类,根据给定长度,使用递归的方式拆分一个json成为多个json组成的列表

    例如,给定的JSON数组`[{"a":"b"},{"a":"b"}]`,如果我们要将其拆分为长度为10的片段,由于整个数组只有两个对象,每个对象的长度都是10,所以结果会是两个包含一个对象的数组`[{"a":"b"}]`和`[{"a":"b"}]`。...

    Map拆分List拆分

    Map拆分是指将一个大Map分成多个小Map,以便在多台机器上并行处理。这种拆分方法可以显著提高计算效率,因为它允许数据在分布式系统中分散,每台机器只需处理一部分数据。例如,在Hadoop MapReduce中,InputFormat类...

    分隔List集合,按指定大小,将集合分成多个的方法

    在编程中,有时我们需要将一个大的集合数据结构,如List,分割成多个小的子集,以便于处理或满足特定需求。本篇文章将详细介绍如何在Java中实现这一功能,特别是针对List集合,按照指定的大小将其分割成多个子List。...

    黑马java教程知识点笔记整理

    微服务架构将大型应用拆分为小型、独立的服务,每个服务都有自己的数据库和业务逻辑。 【Spring框架】 Spring是Java应用开发中最流行的框架,提供依赖注入、AOP(面向切面编程)、事务管理等功能,简化了企业级...

    Java中关于处理字符的方法集合.doc

    除了上述方法,Java `String`类还提供了许多其他实用的方法,如`length()`获取字符串长度,`substring()`截取子字符串,`trim()`去除两端空白,`toUpperCase()`和`toLowerCase()`转换大小写,`indexOf()`和`...

    JAVA 1.7 API

    Java 1.7 API,全称为Java Application Programming Interface,是Java开发工具包(JDK)的一个核心组成部分。这个API文档详细列举了Java 1.7版本中的所有类、接口、枚举以及它们的方法和常量,为开发者提供了丰富的...

    java期末考试99道试题集及答案.docx

    3.Java 中的变量命名规则:变量名不能以数字开头,不能使用关键字,不能包含特殊字符,且区分大小写。 final 关键字 4.final 关键字的使用:final 可以定义常量,子类不能重写父类的 final 方法,但不能通过继承的...

    将一个比较大的list分割为多个小的list

    将一个比较大的list分割为多个小的list,可以解决mybatis批量插⼊数据list超过⼀定长度时报错的解决办法

    java字符集编码乱码详解

    它可以将 Unicode 字符转换为不同长度的字节序列。这种编码方式具有以下几个特点: 1. **兼容 ASCII**: 对于 ASCII 范围内的字符(即单字节字符),UTF-8 编码与 ASCII 完全相同。 2. **变长编码**: UTF-8 可以将 ...

    java面试题目之API基础问答题

    在Java集合框架中,`HashMap`和`Hashtable`都是实现`Map`接口的类,用于存储键值对数据。然而,它们之间存在显著差异: 1. **线程安全性**:`Hashtable`是一个线程安全的Map实现类,所有方法都进行了同步处理,因此...

    提升java代码简洁度的几个小技巧

    5. 将复杂逻辑分解:当一个方法包含太多逻辑时,尝试将其拆分为多个小型、专注的方法。这样每个方法都有明确的责任,易于理解和测试。 6. 注释与文档:良好的注释能提高代码可读性,但避免过度注释。注释应该简洁并...

    华为面试上机题(一)(10题)

    以上知识点均围绕Java编程语言,涵盖了字符串处理、集合框架、输入输出、循环条件判断、大小写敏感性处理、随机数生成、数组操作以及自定义算法实现等关键概念。这些内容是在华为面试以及笔试中常见的考察点,对于...

    Java40道最经典算法

    - **大整数乘法**:如Karatsuba算法,将大数乘法问题分解为较小的乘法操作。 11. **贪心+动态规划**: - **最短路径问题**:Dijkstra算法和Bellman-Ford算法,寻找网络中从源节点到其他所有节点的最短路径。 12....

    JAVA入门1.2.3:一个老鸟的JAVA学习心得 PART1(共3个)

    3.4 小结:基本数据类型—— Java中一切数据和运算的基础 63 3.5 习题 65 第4章 Java中的程序执行流程 67 教学视频:1小时57分钟 4.1 顺序执行 67 4.2 使用if-else让程序懂得判断 68 4.2.1 if语句 68 4.2.2 ...

    Java字符串及数组操作的实例源码

    例如,`String.split().stream()`可以将字符串分割后的数组转换为流,然后通过`map()`、`filter()`等方法进行进一步处理,最后用`collect()`方法将结果收集到新的集合中。 总之,这个"Java字符串及数组操作的实例...

    java语言编程规范.pdf

    Java语言编程规范通常包括一系列为编写高质量、可维护和一致代码而制定的规则和准则。这些规范在Java编程社区中广泛使用,旨在提高代码质量、可读性和可维护性。根据提供的文件内容,以下是关于Java编程规范的一些...

    JAVA代码编程规范

    代码行长度不宜超过80字符,过长应合理拆分。导入相同包内类不超过5个时,逐一列出;超过5个,可用通配符`*`。 #### 总结 Java代码编程规范覆盖了命名、代码结构和风格等方面,旨在提高代码的可读性和维护性。命名...

Global site tag (gtag.js) - Google Analytics