Java中List分片方式詳細(xì)解析
前言
在日常開發(fā)中,經(jīng)常會(huì)遇到持久層批量插入的需求,當(dāng)批量插入的數(shù)據(jù)量比較大時(shí),會(huì)導(dǎo)致執(zhí)行報(bào)錯(cuò),究其原因,是MySQL只能執(zhí)行一定長度的SQL語句,若插入的數(shù)據(jù)量很多時(shí),執(zhí)行的插入語句就會(huì)很長,最終導(dǎo)致執(zhí)行報(bào)錯(cuò)。
解決方式通常如下:
設(shè)置MySQL可以執(zhí)行的SQL語句的最大長度;將List進(jìn)行分片;
下面對List進(jìn)行分片進(jìn)行簡單的分析。
將一個(gè)List分成多個(gè)小List的過程,即為分片,其實(shí)現(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ù)具體需求和場景進(jìn)行選擇使用。
到此這篇關(guān)于Java中List分片方式詳細(xì)解析的文章就介紹到這了,更多相關(guān)Java List分片內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
hibernate-validator后端表單數(shù)據(jù)校驗(yàn)的使用示例詳解
這篇文章主要介紹了hibernate-validator后端表單數(shù)據(jù)校驗(yàn)的使用,hibernate-validator提供的校驗(yàn)方式為在類的屬性上加入相應(yīng)的注解來達(dá)到校驗(yàn)的目的,本文結(jié)合示例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下2022-08-08
詳細(xì)總結(jié)Java創(chuàng)建文件夾的方法及優(yōu)缺點(diǎn)
很多小伙伴都不知道如何用Java創(chuàng)建文件夾,今天給大家整理了這篇文章,文中有非常詳細(xì)的方法介紹及方法的優(yōu)缺點(diǎn),對正在學(xué)習(xí)java的小伙伴們有很好地幫助,需要的朋友可以參考下2021-05-05
java中的動(dòng)態(tài)代理與責(zé)任鏈模式詳解
這篇文章主要介紹了java中的動(dòng)態(tài)代理與責(zé)任鏈模式詳解,動(dòng)態(tài)代理提供了一種靈活且非侵入式的方式,可以對對象的行為進(jìn)行定制和擴(kuò)展,它在代碼重用、解耦和業(yè)務(wù)邏輯分離、性能優(yōu)化以及系統(tǒng)架構(gòu)中起到了重要的作用,需要的朋友可以參考下2023-08-08
Java向上轉(zhuǎn)型和向下轉(zhuǎn)型實(shí)例解析
這篇文章主要介紹了Java向上轉(zhuǎn)型和向下轉(zhuǎn)型實(shí)例解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-02-02
Spring中Transactional注解使用的心得(推薦)
這篇文章主要介紹了Spring中Transactional注解使用的心得,事務(wù)是用來控制數(shù)據(jù)的ACID特性的,用于保證數(shù)據(jù)的正確性和完整性,需要的朋友可以參考下2022-10-10

