日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > java >内容正文

java

Java 中 List 分片的 5 种方法!

發(fā)布時(shí)間:2025/3/11 java 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Java 中 List 分片的 5 种方法! 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

作者 | 王磊

來源 | Java中文社群(ID:javacn666)

轉(zhuǎn)載請(qǐng)聯(lián)系授權(quán)(微信ID:GG_Stone)

前些天在實(shí)現(xiàn) MyBatis 批量插入時(shí)遇到了一個(gè)問題,當(dāng)批量插入的數(shù)據(jù)量比較大時(shí),會(huì)導(dǎo)致程序執(zhí)行報(bào)錯(cuò),如下圖所示:

原因是 MySQL 只能執(zhí)行一定長(zhǎng)度的 SQL 語句,但當(dāng)插入的數(shù)據(jù)量較多時(shí),會(huì)生成一條很長(zhǎng)的 SQL,這樣程序在執(zhí)行時(shí)就會(huì)報(bào)錯(cuò)。

要解決這個(gè)問題,有兩種方法:第一,設(shè)置 MySQL 可以執(zhí)行 SQL 的最大長(zhǎng)度;第二,將一個(gè)大 List 分成 N 個(gè)小 List 進(jìn)行。由于無法準(zhǔn)確的界定程序中最大的 SQL 長(zhǎng)度,所以最優(yōu)的解決方案還是第二種,于是就有了今天的這篇文章。

簡(jiǎn)介

將一個(gè) List 分成多個(gè)小 List 的過程,我們稱之為分片,當(dāng)然也可以叫做“List 分隔”,選一個(gè)你喜歡的、好理解的叫法就行。

在 Java 中,分片的常見實(shí)現(xiàn)方法有以下幾種:

  • 使用 Google 的 Guava 框架實(shí)現(xiàn)分片;

  • 使用 Apache 的 commons 框架實(shí)現(xiàn)分片;

  • 使用國(guó)產(chǎn)神級(jí)框架 Hutool 實(shí)現(xiàn)分片;

  • 使用 JDK 8 中提供 Stream 實(shí)現(xiàn)分片;

  • 自定義分片功能。

  • 接下來我們分別來看。

    1.Google Guava

    先在項(xiàng)目的 pom.xml 中添加框架支持,增加以下配置:

    <!--?google?guava?工具類?--> <!--?https://mvnrepository.com/artifact/com.google.guava/guava?--> <dependency><groupId>com.google.guava</groupId><artifactId>guava</artifactId><version>31.0.1-jre</version> </dependency>

    有了 Guava 框架之后,只需要使用 Lists.partition 方法即可實(shí)現(xiàn)分片,如下代碼所示:

    import?com.google.common.collect.Lists;import?java.util.Arrays; import?java.util.List;/***?Guava?分片*/ public?class?PartitionByGuavaExample?{//?原集合private?static?final?List<String>?OLD_LIST?=?Arrays.asList("唐僧,悟空,八戒,沙僧,曹操,劉備,孫權(quán)".split(","));public?static?void?main(String[]?args)?{//?集合分片List<List<String>>?newList?=?Lists.partition(OLD_LIST,?3);//?打印分片集合newList.forEach(i?->?{System.out.println("集合長(zhǎng)度:"?+?i.size());});} }

    以上代碼的執(zhí)行結(jié)果如下圖所示:

    2.apache commons

    先在項(xiàng)目的 pom.xml 中添加框架支持,增加以下配置:

    <!--?apache?集合工具類?--> <!--?https://mvnrepository.com/artifact/org.apache.commons/commons-collections4?--> <dependency><groupId>org.apache.commons</groupId><artifactId>commons-collections4</artifactId><version>4.4</version> </dependency>

    有了 ?commons 框架之后,只需要使用 ListUtils.partition 方法即可實(shí)現(xiàn)分片,如下代碼所示:

    import?org.apache.commons.collections4.ListUtils;import?java.util.Arrays; import?java.util.List;/***?commons.collections4?集合分片*/ public?class?PartitionExample?{//?原集合private?static?final?List<String>?OLD_LIST?=?Arrays.asList("唐僧,悟空,八戒,沙僧,曹操,劉備,孫權(quán)".split(","));public?static?void?main(String[]?args)?{//?集合分片List<List<String>>?newList?=?ListUtils.partition(OLD_LIST,?3);newList.forEach(i?->?{System.out.println("集合長(zhǎng)度:"?+?i.size());});} }

    以上代碼的執(zhí)行結(jié)果如下圖所示:

    3.Hutool

    先在項(xiàng)目的 pom.xml 中添加框架支持,增加以下配置:

    <!--?工具類?hutool?--> <!--?https://mvnrepository.com/artifact/cn.hutool/hutool-all?--> <dependency><groupId>cn.hutool</groupId><artifactId>hutool-all</artifactId><version>5.7.14</version> </dependency>

    有了 Hutool 框架之后,只需要使用 ListUtil.partition 方法即可實(shí)現(xiàn)分片,如下代碼所示:

    import?cn.hutool.core.collection.ListUtil;import?java.util.Arrays; import?java.util.List;public?class?PartitionByHutoolExample?{//?原集合private?static?final?List<String>?OLD_LIST?=?Arrays.asList("唐僧,悟空,八戒,沙僧,曹操,劉備,孫權(quán)".split(","));public?static?void?main(String[]?args)?{//?分片處理List<List<String>>?newList?=?ListUtil.partition(OLD_LIST,?3);newList.forEach(i?->?{System.out.println("集合長(zhǎng)度:"?+?i.size());});} }

    以上代碼的執(zhí)行結(jié)果如下圖所示:

    4.JDK

    Stream 通過 JDK 8 中的 ?Stream 來實(shí)現(xiàn)分片就無需添加任何框架了,具體的實(shí)現(xiàn)代碼如下:

    import?java.util.Arrays; import?java.util.List; import?java.util.Map; import?java.util.stream.Collectors;/***?JDK?Stream?Partition*/ public?class?PartitionByStreamExample?{//?原集合private?static?final?List<Integer>?OLD_LIST?=?Arrays.asList(1,?2,?3,?4,?5,?6);public?static?void?main(String[]?args)?{//?集合分片:將大于 3 和小于等于 3 的數(shù)據(jù)分別分為兩組Map<Boolean,?List<Integer>>?newMap?=?OLD_LIST.stream().collect(Collectors.partitioningBy(i?->?i?>?3));//?打印結(jié)果System.out.println(newMap);} }

    以上代碼的執(zhí)行結(jié)果如下圖所示:

    此方式的優(yōu)點(diǎn)的無需添加任何框架,但缺點(diǎn)是只能實(shí)現(xiàn)簡(jiǎn)單的分片(將一個(gè) List 分為兩個(gè)),并且要有明確的分片條件。比如本篇案例中設(shè)置的分片條件就是數(shù)組是否大于 3,如果大于 3 就會(huì)被歸為一組,否則就會(huì)被分到另一組。

    5.自定義分片

    如果你不想引入第三方框架,并且使用 Stream 也無法滿足你的需求,你就可以考慮自己寫代碼來實(shí)現(xiàn)分片功能了。因?yàn)榇朔绞讲怀S?#xff0c;所以咱們這里只給出關(guān)鍵方法。

    自定義分片功能的關(guān)鍵實(shí)現(xiàn)方法是 JDK 自帶的 subList 方法,如下圖所示:

    使用示例如下:

    import?java.util.Arrays; import?java.util.List;public?class?App?{private?static?final?List<String>?_OLD_LIST?=?Arrays.asList("唐僧,悟空,八戒,沙僧,曹操,劉備,孫權(quán)".split(","));public?static?void?main(String[]?args)?{//?集合分隔List<String>?list?=?_OLD_LIST.subList(0,?3);//?打印集合中的元素list.forEach(i?->?{System.out.println(i);});} }

    以上代碼的執(zhí)行結(jié)果如下圖所示:

    總結(jié)

    本文介紹了 5 種 List 分片的實(shí)現(xiàn)方法,其中最方便的實(shí)現(xiàn)方式是引入第三方框架,比如 Google 的 Guava、Apache 的 Commons 或者是國(guó)產(chǎn)開源的 Hutool 都可以,當(dāng)然如果你的項(xiàng)目已經(jīng)包含了以上任意一種,直接使用就行了。如果是簡(jiǎn)單的分片就可以考慮使用 JDK 的 Stream 或者是 List 內(nèi)置的 subList 方法來實(shí)現(xiàn)分片功能了。

    往期推薦

    MyBatis原生批量插入的坑與解決方案!


    4 種方法!檢查字符串是否為合法的日期格式


    高并發(fā)下秒殺商品,必須知道的9個(gè)細(xì)節(jié)



    總結(jié)

    以上是生活随笔為你收集整理的Java 中 List 分片的 5 种方法!的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

    主站蜘蛛池模板: 国产欧美三级 | 国产精品27p | 人妻无码久久精品人妻 | 日韩伦理一区二区三区 | 操操久久| 久久视频免费在线观看 | 色噜噜一区二区 | 五月婷婷综合久久 | 中国黄色免费 | 碰在线视频| 婷婷视频在线观看 | 日韩黄色一级片 | 日本天堂免费 | 成人免费网站在线观看 | 苍井空浴缸大战猛男120分钟 | 精品中文字幕一区二区三区 | 久热网 | 黄页网站免费观看 | 国产精品成人久久电影 | 色香蕉网 | 99在线免费视频 | 视频一区二区免费 | 奇米影视亚洲 | 尤物视频免费观看 | 翔田千里一区二区 | 黄色小视频大全 | 中文字幕专区 | 日本激情网址 | 亚日韩 | 裸体女视频 | 亚洲一区播放 | 波多野结衣一区二区三区高清 | www.夜夜骑| 毛茸茸日本熟妇高潮 | 黑人3p波多野结衣在线观看 | 97在线免费公开视频 | 19韩国主播青草vip | 亚洲免费三区 | 免费观看国产视频 | 手机看片在线观看 | 阿的白色内裤hd中文 | 日本乱轮视频 | 久久久久久久伊人 | 成人久久18免费网站图片 | 国产无人区码熟妇毛片多 | 国产免费91视频 | 六月丁香av| 欧美亚洲中文精品字幕 | 日韩专区在线 | 黄页视频在线免费观看 | 韩国精品久久久 | 青青草黄色 | 肉大捧一进一出免费视频 | 欧美一区在线观看视频 | 久免费一级suv好看的国产 | 精品人妻无码一区二区三区换脸 | 电影寂寞少女免费观看 | 手机av免费在线 | 日本一区三区 | 男人私人影院 | av网址免费| 欧美黄色一级大片 | 中文字幕丰满孑伦无码专区 | 国产高清不卡 | 欧美成人一区二免费视频软件 | 色伊人 | 狠狠ri | 国产色悠悠 | 孕妇爱爱视频 | 亚洲精品网站在线播放gif | 一区二区三区观看 | 国产在线网 | 精品少妇人妻一区二区黑料社区 | 欧美极品少妇 | 五月涩| 干爹你真棒插曲mv在线观看 | 日韩精品影视 | 羞羞的视频网站 | 精品国产一区二区三区久久久久久 | 999精品在线观看 | √8天堂资源地址中文在线 欧美精品在线一区二区 | 雷电将军和丘丘人繁衍后代视频 | 秋霞一级全黄大片 | 综合视频在线 | 特黄特色大片免费视频大全 | 久久久久国产精品无码免费看 | 国产一级视频在线播放 | 色av性av丰满av | 久久午夜免费视频 | 超碰888| 亚洲精品国产一区二 | 五月亚洲综合 | 久久久久九九 | 男女av网站 | 亚洲国产天堂av | 夜久久| 欧美日本高清 | 色哟哟网站在线观看 | 69精品人妻一区二区三区 |