我们在使用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的功能,它们都是经过严格的单元测试的代码。
相关推荐
然而,如果需要将一个大集合按照固定的长度拆分为多个小集合,我们可以使用另一种方法。这里提供了一个通用的`split`方法,它接受一个任意类型泛型的List和一个整数参数,表示每个子集合的长度: ```java public ...
Map拆分是指将一个大Map分成多个小Map,以便在多台机器上并行处理。这种拆分方法可以显著提高计算效率,因为它允许数据在分布式系统中分散,每台机器只需处理一部分数据。例如,在Hadoop MapReduce中,InputFormat类...
例如,给定的JSON数组`[{"a":"b"},{"a":"b"}]`,如果我们要将其拆分为长度为10的片段,由于整个数组只有两个对象,每个对象的长度都是10,所以结果会是两个包含一个对象的数组`[{"a":"b"}]`和`[{"a":"b"}]`。...
在编程中,有时我们需要将一个大的集合数据结构,如List,分割成多个小的子集,以便于处理或满足特定需求。本篇文章将详细介绍如何在Java中实现这一功能,特别是针对List集合,按照指定的大小将其分割成多个子List。...
微服务架构将大型应用拆分为小型、独立的服务,每个服务都有自己的数据库和业务逻辑。 【Spring框架】 Spring是Java应用开发中最流行的框架,提供依赖注入、AOP(面向切面编程)、事务管理等功能,简化了企业级...
除了上述方法,Java `String`类还提供了许多其他实用的方法,如`length()`获取字符串长度,`substring()`截取子字符串,`trim()`去除两端空白,`toUpperCase()`和`toLowerCase()`转换大小写,`indexOf()`和`...
Java 1.7 API,全称为Java Application Programming Interface,是Java开发工具包(JDK)的一个核心组成部分。这个API文档详细列举了Java 1.7版本中的所有类、接口、枚举以及它们的方法和常量,为开发者提供了丰富的...
3.Java 中的变量命名规则:变量名不能以数字开头,不能使用关键字,不能包含特殊字符,且区分大小写。 final 关键字 4.final 关键字的使用:final 可以定义常量,子类不能重写父类的 final 方法,但不能通过继承的...
将一个比较大的list分割为多个小的list,可以解决mybatis批量插⼊数据list超过⼀定长度时报错的解决办法
它可以将 Unicode 字符转换为不同长度的字节序列。这种编码方式具有以下几个特点: 1. **兼容 ASCII**: 对于 ASCII 范围内的字符(即单字节字符),UTF-8 编码与 ASCII 完全相同。 2. **变长编码**: UTF-8 可以将 ...
在Java集合框架中,`HashMap`和`Hashtable`都是实现`Map`接口的类,用于存储键值对数据。然而,它们之间存在显著差异: 1. **线程安全性**:`Hashtable`是一个线程安全的Map实现类,所有方法都进行了同步处理,因此...
5. 将复杂逻辑分解:当一个方法包含太多逻辑时,尝试将其拆分为多个小型、专注的方法。这样每个方法都有明确的责任,易于理解和测试。 6. 注释与文档:良好的注释能提高代码可读性,但避免过度注释。注释应该简洁并...
以上知识点均围绕Java编程语言,涵盖了字符串处理、集合框架、输入输出、循环条件判断、大小写敏感性处理、随机数生成、数组操作以及自定义算法实现等关键概念。这些内容是在华为面试以及笔试中常见的考察点,对于...
- **大整数乘法**:如Karatsuba算法,将大数乘法问题分解为较小的乘法操作。 11. **贪心+动态规划**: - **最短路径问题**:Dijkstra算法和Bellman-Ford算法,寻找网络中从源节点到其他所有节点的最短路径。 12....
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 ...
例如,`String.split().stream()`可以将字符串分割后的数组转换为流,然后通过`map()`、`filter()`等方法进行进一步处理,最后用`collect()`方法将结果收集到新的集合中。 总之,这个"Java字符串及数组操作的实例...
Java语言编程规范通常包括一系列为编写高质量、可维护和一致代码而制定的规则和准则。这些规范在Java编程社区中广泛使用,旨在提高代码质量、可读性和可维护性。根据提供的文件内容,以下是关于Java编程规范的一些...
代码行长度不宜超过80字符,过长应合理拆分。导入相同包内类不超过5个时,逐一列出;超过5个,可用通配符`*`。 #### 总结 Java代码编程规范覆盖了命名、代码结构和风格等方面,旨在提高代码的可读性和维护性。命名...