Java中List分片的五种方法详解

原因是 MySQL 只能执行一定长度的 SQL 语句,但当插入的数据量较多时,会生成一条很长的 SQL,这样程序在执行时就会报错。

要解决这个问题,有两种方法:第一,设置 MySQL 可以执行 SQL 的最大长度;第二,将一个大 List 分成 N 个小 List 进行。由于无法准确的界定程序中最大的 SQL 长度,所以最优的解决方案还是第二种,于是就有了今天的这篇文章。

简介

将一个 List 分成多个小 List 的过程,我们称之为分片,当然也可以叫做“List 分隔”,选一个你喜欢的、好理解的叫法就行。

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

  1. 使用 Google 的 Guava 框架实现分片;

  2. 使用 Apache 的 commons 框架实现分片;

  3. 使用国产神级框架 Hutool 实现分片;

  4. 使用 JDK 8 中提供 Stream 实现分片;

  5. 自定义分片功能。

接下来我们分别来看。

1.Google Guava


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

com.google.guava

guava

31.0.1-jre

复制代码

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

import com.google.common.collect.Lists;

import java.util.Arrays;

import java.util.List;

/**

  • Guava 分片
  • */

    public class PartitionByGuavaExample {

    // 原集合

    private static final List OLD_LIST = Arrays.asList(

    “唐僧,悟空,八戒,沙僧,曹操,刘备,孙权”.split(“,”));

    public static void main(String[] args) {

    // 集合分片

    List<List> newList = Lists.partition(OLD_LIST, 3);

    // 打印分片集合

    newList.forEach(i -> {

    System.out.println(“集合长度:” + i.size());

    });

    }

    }

    复制代码

    以上代码的执行结果如下图所示:

    2.apache commons


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

    org.apache.commons

    commons-collections4

    4.4

    复制代码

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

    import org.apache.commons.collections4.ListUtils;

    import java.util.Arrays;

    import java.util.List;

    /**

  • commons.collections4 集合分片
  • */

    public class PartitionExample {

    // 原集合

    private static final List OLD_LIST = Arrays.asList(

    “唐僧,悟空,八戒,沙僧,曹操,刘备,孙权”.split(“,”));

    public static void main(String[] args) {

    // 集合分片

    List<List> newList = ListUtils.partition(OLD_LIST, 3);

    newList.forEach(i -> {

    System.out.println(“集合长度:” + i.size());

    });

    }

    }

    复制代码

    以上代码的执行结果如下图所示:

    3.Hutool


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

    cn.hutool

    hutool-all

    5.7.14

    复制代码

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

    import cn.hutool.core.collection.ListUtil;

    import java.util.Arrays;

    import java.util.List;

    public class PartitionByHutoolExample {

    // 原集合

    private static final List OLD_LIST = Arrays.asList(

    “唐僧,悟空,八戒,沙僧,曹操,刘备,孙权”.split(“,”));

    public static void main(String[] args) {

    // 分片处理

    List<List> newList = ListUtil.partition(OLD_LIST, 3);

    newList.forEach(i -> {

    System.out.println(“集合长度:” + i.size());

    });

    }

    }

    复制代码

    以上代码的执行结果如下图所示:

    4.JDK


    最后

    自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

    深知大多数Java工程师,想要提升技能,往往是自己摸索成长,自己不成体系的自学效果低效漫长且无助。

    因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

    既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,不论你是刚入门Android开发的新手,还是希望在技术上不断提升的资深开发者,这些资料都将为你打开新的学习之门!

    如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!

    由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
    FnipO-1715333095976)]

    [外链图片转存中…(img-PpQOLYm2-1715333095976)]

    既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,不论你是刚入门Android开发的新手,还是希望在技术上不断提升的资深开发者,这些资料都将为你打开新的学习之门!

    如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!

    由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

    作者:一条小尾鱼

    物联沃分享整理
    物联沃-IOTWORD物联网 » Java中List分片的五种方法详解

    发表回复