Java List 分割
目录
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< String >的区别及相互转换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 分割相关推荐
- java 竖线分割字符串的问题
java 竖线分割字符串的问题 java 竖线分割字符串的问题 例1: String[] paraStr = "6010;320100;A".split(";" ...
- Java字符串分割(split)
Java中分割字符串的函数是split. public String[] split(String regex,int limit),用String regex来分割字符串,返回值是字符串数组 Str ...
- java 文件分割器_Java分割器
java 文件分割器 Java Spliterator is one of the four iterators – Enumeration, Iterator, ListIterator and S ...
- java string分割_java 字符串分割的三种方法(总结)
最近在项目中遇到一个小问题,一个字符串分割成一个数组,类似String str="aaa,bbb,ccc"; 然后以","为分割符,将其分割成一个数组,用什么方 ...
- java:分割字符串(指定范围分割和次数)
java:分割字符串 关键词 测试说明 补充说明 源码 运行结果 关键词 Sting[] newArray=str.split("\这里放要分割的符号",这里放分割次数); spl ...
- java字符串分割性能_String字符串性能优化的几种方案
反编译后的代码: 1 //Decompiled by Jad v1.5.8g. Copyright 2001 Pavel Kouznetsov.2 //Jad home page:http://www ...
- java 图片分割_Java atlas图集分割
java版本的图集分割 atlasFilePath : 图集配置文件 imageFilePath :图集文件 outPath :输出文件夹 图片读取 图片裁剪 图片存储 StringUtil.pars ...
- Java 字符串分割陷阱
Java中关于字符串有一个split方法,这个方法可以实现分割字符串的作用: 但是如果使用一些正则表达式中出现的字符时Java编译器会报错, 如: String str = "com.zh ...
- java竖线分割_Java String类的Split以竖线作为分隔符
版权声明:本文为博主原创文章,转载请写明出处.https://blog.csdn.net/wo541075754/article/details/50668160 问题 Java中String类的Sp ...
- [转载] Java字符串分割方法
参考链接: Java中的StringTokenizer方法的示例 2 [size=medium]1.用split()方法进行分割,分割开的子字符串放入数组,然后进行处理. 示例代码如下: public ...
最新文章
- 在ASP.NET中跨页面实现多选
- 收藏:因为有这篇Sublime Text使用教程,我立即卸载掉了Notepad+...
- 《深入浅出Nodejs》—— 读后总结
- 转 mvc项目中,解决引用jquery文件后智能提示失效的办法
- ASP.NET MVC3 Razor视图引擎-基础语法
- excel实战应用案例100讲(十三)-使用Python 对 Excel文件进行批量操作
- idea错误提示不明显_微信公众号扫一扫功能提示:10003 redirect_uri域名与后台配置不一致错误解决方案...
- osx+配置+php扩展,Mac系统升级到10.9(mavericks)时安装php扩展问题解决
- Emmet插件比较实用常用的写法
- linux 脚本 格式化,Formatting Long Lines 格式化多行字符的shell脚本
- 2019一注结构成绩_2019年福建地区计算机考研汇总分析
- Bpel简介及实例总结
- axure网页预览_解决Axure发布分享预览的3个方法
- SQLExpress数据库类型与AttachDbFilename用法
- Spring web开发用post方法和button遇到http405的一种解决方法
- YOLOv5损失函数定义
- android 手机解锁声音,新奇玩法:教大家一个手机声控解锁的方法!识别率很高噢!...
- 第15节 域之集中管理、统一管理
- Unity 灯光系统详解
- UE4 自定义按键事件(踩坑记录)
热门文章
- 红米3s进不了recovery_红米 3S英文版Recovery使用教程
- QT 数据库及其使用
- 永恒之塔 服务器维护,游戏运行给力永恒之塔更换顶级服务器
- vscode中怎样格式化js代码_如何在Visual Studio代码(VSCode)中格式化代码
- Postman进阶篇(九)-动态变量(Dynamic variables)随机生成参数
- 单片机单口不可用或被占用_KQD:快驱动单片机
- [附源码]JAVA+ssm计算机毕业设计车站商铺信息管理系统(程序+Lw)
- Java学习笔记 六、面向对象编程中级部分
- Python中的groupby分组
- 【语音之家】AI产业沙龙—京东在AI语音方向的技术探索与实践