首页 > 其他分享 >List的拆分的几种方式

List的拆分的几种方式

时间:2023-05-31 12:00:40浏览次数:36  
标签:partition List 几种 冥王星 拆分 如下 tempList

开发中我们可能会遇到一个大的集合,然后我们需要对集合进行拆分,然后再对拆分的集合进行相关的操作。当然我们可以自己写一个拆分的方法,我自己写过用了不少代码,但是感觉还不是很好,最近看了不少工具才发现很多的大神们其实已经写了工具类,我们站在大神肩膀上开发就行了。

将List拆分很多的小的List的过程,我们称之为分片,当然也可以称为List的分隔,选一个你喜欢的名字就行,你喜欢的就是最好的(这怎么像渣男语录啊,一定要擦亮眼睛,不要让别人画大饼)。

在Java中分片的常见实现方法有以下几种:

1:使用Google的Guava框架实现切片。

2:使用Apache的commons框架实现切片。

3:使用Hutool工具类实现切片。

接下来我们就分别看一下,你的项目中如果已经引用了相应的jar包你就可以使用相应的方法实现List切片。

1.Google Guava

先在项目的 pom.xml 中添加框架支持,增加以下配置:

<dependency>
            <groupId>com.google.guava</groupId>
            <artifactId>guava</artifactId>
            <version>31.0.1-jre</version>
        </dependency>

有了 Guava 框架之后,只需要使用 Lists.partition 方法即可实现分片,如下代码所示:

List<String> tempList = Arrays.asList("水星","金星","地球","火星",
"冥王星","土星","天王星","海王星","冥王星","木星");
// size 是把集合拆分的大小,size 为表示拆分成拆分的集合大小为3,
// 后面不足3的有多少算多少
List<List<String>> partition = Lists.partition(tempList, 3);
System.out.println(partition);

结果如下:(拆成如下结果,开发的时候再遍历集合进行应用)

[[水星, 金星, 地球], 
[火星, 冥王星, 土星], 
[天王星, 海王星, 冥王星], 
[木星]]

2.apache commons

先在项目的 pom.xml 中添加框架支持,增加以下配置:

<dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-collections4</artifactId>
            <version>4.4</version>
        </dependency>

有了  commons 框架之后,只需要使用 ListUtils.partition 方法即可实现分片,如下代码所示:

List<String> tempList = Arrays.asList("水星","金星","地球","火星","冥王星","土星","天王星","海王星","冥王星","木星");
List<List<String>> partition = ListUtils.partition(tempList, 6);

System.out.println(partition);

输出结果如下:

[[水星, 金星, 地球, 火星, 冥王星, 土星],
 [天王星, 海王星, 冥王星, 木星]]

3.Hutool

先在项目的 pom.xml 中添加框架支持,增加以下配置:

<dependency>
            <groupId>cn.hutool</groupId>
            <artifactId>hutool-all</artifactId>
            <version>5.7.14</version>
        </dependency>

有了 Hutool 框架之后,只需要使用 ListUtil.partition 方法即可实现分片,如下代码所示:

List<String> tempList = Arrays.asList("水星","金星","地球","火星","冥王星","土星","天王星","海王星","冥王星","木星");
 List<List<String>> partition = ListUtil.partition(tempList, 5);

 System.out.println(partition);

输出结果如下:

[[水星, 金星, 地球, 火星, 冥王星], 
[土星, 天王星, 海王星, 冥王星, 木星]]

有的小伙伴可能会说,为什么要给出三种的,给出一种切片方法不就可以了,因为列举每一种方法都需要引入对应的jar包,所以自己按需引用,如果你的项目中已经引用了对应的jar就参考其中的一个例子写就行了。

又有小伙伴要问这样切分有什么用途呢?这个用途还是很广泛的,比如你做批量新增数据的时候,如果你有几万条数据要新增到数据库,最好对这几万条数据拆分一下再插入数据库,例如ORACLE你如果一次批量新增超过1000条就有可能会新增失败。Mysql批量新增一次过多也可能回报如下

com.mysql.jdbc.PacketTooBigException: Packet for query is too large (16888937 > 1048576). 

You can change this value on the server by setting the max_allowed_packet' variable.

这种错误,当然这种错误可以通过设置如下参数解决:

SET GLOBAL max_allowed_packet = 1024*1024*64

但是你不能把这个参数设置无限大,设置无限大也是不好的。所以批量新增大量数据最好拆分一下。

【PS其实我上面引用的那些jar包,每个包里面都有很多工具类供开发者使用,并且都是经过大量实践的,性能也是很好的小伙伴们可以引入对应的jar看看各个工具类的源码真的是太好用了】,欢迎关注,感谢关注。

标签:partition,List,几种,冥王星,拆分,如下,tempList
From: https://www.cnblogs.com/scott1102/p/17445731.html

相关文章

  • 构建AI应用的几种范式思考
    一、基础LLM模型的局限与对应的研发范式单纯的LLM多轮交互更多面向C端消费场景,而B端应用场景需要LLM进行更多的被集成工作更抽象、更本质地看,LLM充当的是物理世界人类语言—>信息世界比特信息的翻译者的角色,它带来的是一种新的人机交互方式的改变。基于这种范式改变,传统的所有B......
  • cassandra cpp driver中bind list——用cass_statement_bind_collection函数
     CassErrorinsert_into_collections(CassSession*session,constchar*key,constchar*items[]){CassErrorrc=CASS_OK;CassStatement*statement=NULL;CassFuture*future=NULL;CassCollection*collection=NULL;constchar**item=NULL;c......
  • MySQL数据库,字符串字段拆分
    MySQL数据库,字符串字段拆分英文姓名存储在一个字段如何拆分出firstname和lastname查询语句SELECTREPLACE(name,CONCAT('',SUBSTRING_INDEX(name,'',-1)),'')ASfirstname,SUBSTRING_INDEX(name,'',-1)ASlastnameFROMpeople;SUBSTRING_INDE......
  • 如何使用ListView以提供一个选择列表给用户
    如何使用ListView以提供一个选择列表给用户ListView是一个列表框控件。它可以在一个垂直滚动区域中显示一个项目列表,并允许用户进行选择。效果展示示例代码importjavafx.application.Application;importjavafx.collections.ObservableList;importjavafx.geometry.Inse......
  • leetcode 83. Remove Duplicates from Sorted List
    Givenasortedlinkedlist,deleteallduplicatessuchthateachelementappearonlyonce.Forexample,Given1->1->2,return1->2.Given1->1->2->3->3,return1->2->3.#Definitionforsingly-linkedlist.#classListNode(object)......
  • C# 程序开发中如何移除List集合的某列(属性)呢?
    如题,在C#&.NET,.NETCore程序开发中如何移除List集合的某列(属性)呢?比如,有以下的MyClass类: publicclassMyClass{publicintColumn1{get;set;}publicstringColumn2{get;set;}publicintColumn3{get;set;}}现在MyClass的集合myList,如何......
  • linkedList
    importjava.util.LinkedList;importjava.util.List;publicclassLinkedL{publicstaticvoidmain(String[]args){//LinkedList//1--创建对象LinkedListlinkedList=newLinkedList();//2--调用方法//add(是list的子类所以说还......
  • 139. 单词拆分
    给你一个字符串s和一个字符串列表wordDict作为字典。请你判断是否可以利用字典中出现的单词拼接出s。注意:不要求字典中出现的单词全部都使用,并且字典中的单词可以重复使用。输入:s="leetcode",wordDict=["leet","code"]输出:true解释:返回true因为"leetcod......
  • 服务之:urlacl解决服务HttpListener监听url需要管理员
    在使用HttpListener监听url时,如果没有以管理员身份运行可能会抛出异常,无法监听,遇到这个问题时,可以先使用管理员权限的程序将Url注册到urlacl列表,解决普通权限无法开启监听问题第一步: Netshhttpshowurlacl。查看有没有需要监听的url 第二步:添加Url到Urlacl:例如添加  "......
  • 3.4. Java集合框架(List、Set、Map等)
    Java集合框架是Java提供的一套用于存储和操作数据的接口和类。它包括以下几个主要部分:接口:集合框架定义了一系列接口,如Collection、List、Set、Map等。实现类:集合框架提供了一些实现这些接口的类,如ArrayList、LinkedList、HashSet、LinkedHashSet、HashMap、LinkedHashMap等。......