目录

1、使用 Java ArrayList subList() 方法

1.1、 将源 List 按照指定元素数量拆分为多个List

1.2、 方法介绍:

2、使用 谷歌  Lists.partition() 方法

踩坑:


1、使用 Java ArrayList subList() 方法

1.1、 将源 List 按照指定元素数量拆分为多个List

   /*** 将源List按照指定元素数量拆分为多个List* * @param source 源List* @param splitItemNum 每个List中元素数量*/public static <T> List<List<T>> averageAssign(List<T> source, int splitItemNum) {List<List<T>> result = new ArrayList<List<T>>();if (source != null && source.size() > 0 && splitItemNum > 0) {if (source.size() <= splitItemNum) {// 源List元素数量小于等于目标分组数量result.add(source);} else {// 计算拆分后list数量int splitNum = (source.size() % splitItemNum == 0) ? (source.size() / splitItemNum) : (source.size() / splitItemNum + 1);List<T> value = null;for (int i = 0; i < splitNum; i++) {if (i < splitNum - 1) {value = source.subList(i * splitItemNum, (i + 1) * splitItemNum);} else {// 最后一组value = source.subList(i * splitItemNum, source.size());}result.add(value);}}}return result;}

测试:

   public static void main(String[] args) {//初始化一个数组数据String [] strArray = {"1","2","3","4","5","6","7","8","9","10","11","12","13"};//把数组转List 使用 Arrays.asList() 这里存在一个问题,暂时标记 后面文章做讲解:问题1List sourseList = Arrays.asList(strArray);int splitItemNum= 3;List<List<Map<String, String>>> result = averageAssign(sourseList , splitItemNum);result.forEach(list->{System.out.println(list.toString()+" 数量"+list.size());});}

结果:

String []  数组 转 List  使用 Arrays.asList()  存在问题:问题1

UnsupportedOperationException异常_路漫漫其修远兮,吾将上下而求索。-CSDN博客_unsupportedoperationexception我们先来重温一下题目,有什么疑问的可以移步传送门。String[]和List&lt; String &gt;的区别及相互转换public class test { public static void main(String[] args) { //定义一个字符长度为5的字符串 String[] strings = new String[5]; strings[0]...https://blog.csdn.net/qq_33774822/article/details/83213947

1.2、 方法介绍:

subList() 方法用于截取并返回动态数组中的一部分。

subList() 方法的语法为:

        arraylist.subList(int fromIndex, int toIndex)

注:arraylist 是 ArrayList 类的一个对象。

参数说明:

  • fromIndex - 截取元素的起始位置,包含该索引位置元素
  • toIndex - 截取元素的结束位置,不包含该索引位置元素

返回值

返回给定的动态数组截取的部分。

如果fromIndex 小于 0 或大于数组的长度,则抛出 IndexOutOfBoundsException 的异常

如果 fromIndex 大于 toIndex 的值则抛出 IllegalArgumentException 异常。

注意:该动态数组包含的元素起始于 fromIndex 位置,直到元素索引位置为 toIndex-1,而索引位置 toIndex 的元素并不包括。

2、使用 谷歌  Lists.partition() 方法

引用:

com.google.common.collect.Lists
    List<Integer> integers = new ArrayList<>();//Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 11, 12, 13, 14,15, 16, 17, 18);for (int i = 0; i < 19; i++) {integers.add(i);}// 每4个元素分割为一个listList<List<Integer>> partition = Lists.partition(integers, 4);partition.forEach(list-> {System.out.println(list.toString()+" 数量"+list.size());});

测试

踩坑:

在实际开发场景中,我们即便分割成自己想要的结果后 可能还需要对源集合进行业务操作,所以 按上述代码 分割出结果后,若此时操作源List->integers 向集合添加新元素,分割的子集合将会有什么现象呢?

    List<Integer> integers = new ArrayList<>();//Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 11, 12, 13, 14,15, 16, 17, 18);for (int i = 0; i < 19; i++) {integers.add(i);}System.out.println("源List:integers分割前:");System.out.println(JSON.toJSONString(integers));// 每4个元素分割为一个listList<List<Integer>> partition = Lists.partition(integers, 4);System.out.println("Lists.partition分割后:");partition.forEach(list-> {System.out.println(list.toString()+" 数量"+list.size());});integers.add(18);integers.add(19);integers.add(20);System.out.println("源List:integers添加新元素后:");System.out.println(JSON.toJSONString(integers));System.out.println("源List:integers添加新元素后,对分割后的partition影响结果:");partition.forEach(list-> {System.out.println(list.toString()+" 数量"+list.size());});

结果:

观察结果发现,已经分割后的结果 也会被源集合的add、remove等操作影响。

ArrayList源码解析subList 详情:

ArrayList源码解析之subList_PrimeYun的博客-CSDN博客

Java List 分割相关推荐

  1. java 竖线分割字符串的问题

    java 竖线分割字符串的问题 java 竖线分割字符串的问题 例1:  String[] paraStr = "6010;320100;A".split(";" ...

  2. Java字符串分割(split)

    Java中分割字符串的函数是split. public String[] split(String regex,int limit),用String regex来分割字符串,返回值是字符串数组 Str ...

  3. java 文件分割器_Java分割器

    java 文件分割器 Java Spliterator is one of the four iterators – Enumeration, Iterator, ListIterator and S ...

  4. java string分割_java 字符串分割的三种方法(总结)

    最近在项目中遇到一个小问题,一个字符串分割成一个数组,类似String str="aaa,bbb,ccc"; 然后以","为分割符,将其分割成一个数组,用什么方 ...

  5. java:分割字符串(指定范围分割和次数)

    java:分割字符串 关键词 测试说明 补充说明 源码 运行结果 关键词 Sting[] newArray=str.split("\这里放要分割的符号",这里放分割次数); spl ...

  6. java字符串分割性能_String字符串性能优化的几种方案

    反编译后的代码: 1 //Decompiled by Jad v1.5.8g. Copyright 2001 Pavel Kouznetsov.2 //Jad home page:http://www ...

  7. java 图片分割_Java atlas图集分割

    java版本的图集分割 atlasFilePath : 图集配置文件 imageFilePath :图集文件 outPath :输出文件夹 图片读取 图片裁剪 图片存储 StringUtil.pars ...

  8. Java 字符串分割陷阱

    Java中关于字符串有一个split方法,这个方法可以实现分割字符串的作用: 但是如果使用一些正则表达式中出现的字符时Java编译器会报错, 如: String  str = "com.zh ...

  9. java竖线分割_Java String类的Split以竖线作为分隔符

    版权声明:本文为博主原创文章,转载请写明出处.https://blog.csdn.net/wo541075754/article/details/50668160 问题 Java中String类的Sp ...

  10. [转载] Java字符串分割方法

    参考链接: Java中的StringTokenizer方法的示例 2 [size=medium]1.用split()方法进行分割,分割开的子字符串放入数组,然后进行处理. 示例代码如下: public ...

最新文章

  1. 在ASP.NET中跨页面实现多选
  2. 收藏:因为有这篇Sublime Text使用教程,我立即卸载掉了Notepad+...
  3. 《深入浅出Nodejs》—— 读后总结
  4. 转 mvc项目中,解决引用jquery文件后智能提示失效的办法
  5. ASP.NET MVC3 Razor视图引擎-基础语法
  6. excel实战应用案例100讲(十三)-使用Python 对 Excel文件进行批量操作
  7. idea错误提示不明显_微信公众号扫一扫功能提示:10003 redirect_uri域名与后台配置不一致错误解决方案...
  8. osx+配置+php扩展,Mac系统升级到10.9(mavericks)时安装php扩展问题解决
  9. Emmet插件比较实用常用的写法
  10. linux 脚本 格式化,Formatting Long Lines 格式化多行字符的shell脚本
  11. 2019一注结构成绩_2019年福建地区计算机考研汇总分析
  12. Bpel简介及实例总结
  13. axure网页预览_解决Axure发布分享预览的3个方法
  14. SQLExpress数据库类型与AttachDbFilename用法
  15. Spring web开发用post方法和button遇到http405的一种解决方法
  16. YOLOv5损失函数定义
  17. android 手机解锁声音,新奇玩法:教大家一个手机声控解锁的方法!识别率很高噢!...
  18. 第15节 域之集中管理、统一管理
  19. Unity 灯光系统详解
  20. UE4 自定义按键事件(踩坑记录)

热门文章

  1. 红米3s进不了recovery_红米 3S英文版Recovery使用教程
  2. QT 数据库及其使用
  3. 永恒之塔 服务器维护,游戏运行给力永恒之塔更换顶级服务器
  4. vscode中怎样格式化js代码_如何在Visual Studio代码(VSCode)中格式化代码
  5. Postman进阶篇(九)-动态变量(Dynamic variables)随机生成参数
  6. 单片机单口不可用或被占用_KQD:快驱动单片机
  7. [附源码]JAVA+ssm计算机毕业设计车站商铺信息管理系统(程序+Lw)
  8. Java学习笔记 六、面向对象编程中级部分
  9. Python中的groupby分组
  10. 【语音之家】AI产业沙龙—京东在AI语音方向的技术探索与实践