Java中List分片方式詳細解析
前言
在日常開發(fā)中,經(jīng)常會遇到持久層批量插入的需求,當(dāng)批量插入的數(shù)據(jù)量比較大時,會導(dǎo)致執(zhí)行報錯,究其原因,是MySQL只能執(zhí)行一定長度的SQL語句,若插入的數(shù)據(jù)量很多時,執(zhí)行的插入語句就會很長,最終導(dǎo)致執(zhí)行報錯。
解決方式通常如下:
設(shè)置MySQL可以執(zhí)行的SQL語句的最大長度;將List進行分片;
下面對List進行分片進行簡單的分析。
將一個List分成多個小List的過程,即為分片,其實現(xiàn)方式有如下:
- Google的Guava組件;
- Apache的commons組件;
- 國產(chǎn)的Hutool組件;
- JDK8的Stream流;
- 自定義;
1、Google的Guava組件方式
public static void main(String[] args) { List<String> list = Arrays.asList("曹操,孫權(quán),劉備,袁紹,張繡,馬騰,張魯".split(",")); List<List<String>> partition = Lists.partition(list, 3); partition.forEach(i -> { System.out.println("子集合:" + i); }); }
執(zhí)行結(jié)果如下:
2、Apache的commons組件方式
public static void main(String[] args) { List<String> list = Arrays.asList("曹操,孫權(quán),劉備,袁紹,張繡,馬騰,張魯".split(",")); List<List<String>> partition = ListUtils.partition(list, 3); partition.forEach(i -> { System.out.println("子集合:" + i); }); }
執(zhí)行結(jié)果同上。
3、國產(chǎn)的Hutool組件方式
public static void main(String[] args) { List<String> list = Arrays.asList("曹操,孫權(quán),劉備,袁紹,張繡,馬騰,張魯".split(",")); List<List<String>> partition = ListUtil.partition(list,3); partition.forEach(i -> { System.out.println("子集合:" + i); }); }
執(zhí)行結(jié)果同上。
4、JDK8的Stream流方式
public static void main(String[] args) { List<String> list = Arrays.asList("曹操,孫權(quán),劉備,袁紹,張繡,馬騰,張魯".split(",")); Map<Boolean, List<String>> collect = list.stream().collect(Collectors.partitioningBy(str -> { return str.equals("曹操"); })); System.out.println(collect); }
執(zhí)行結(jié)果如下:
5、自定義方式
public static void main(String[] args) { List<String> list = Arrays.asList("曹操,孫權(quán),劉備,袁紹,張繡,馬騰,張魯".split(",")); List<String> subList = list.subList(0, 3); subList.forEach(i -> System.out.println(i)); }
執(zhí)行結(jié)果如下:
上面即為常見的List分片方式,可以根據(jù)具體需求和場景進行選擇使用。
到此這篇關(guān)于Java中List分片方式詳細解析的文章就介紹到這了,更多相關(guān)Java List分片內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
JAVA中實現(xiàn)原生的 socket 通信機制原理
本篇文章主要介紹了JAVA中實現(xiàn)原生的 socket 通信機制原理,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-08-08說一說java關(guān)鍵字final和transient
這篇文章主要和大家說一說java關(guān)鍵字final和transient,感興趣的小伙伴們可以參考一下2016-06-06springboot多環(huán)境進行動態(tài)配置的方法
這篇文章主要介紹了springboot多環(huán)境下如何進行動態(tài)配置,本文主要分享了如何在springboot的項目中使用多環(huán)境配置,重點是”spring.profiles.active“屬性,需要的朋友可以參考下2022-06-06Mybatis-plus:${ew.sqlselect}用法說明
這篇文章主要介紹了Mybatis-plus:${ew.sqlselect}用法說明,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-06-06