Java中List分片方式详细解析

 更新时间:2022年09月30日 10:46:09   作者:ldcaws  
这篇文章主要介绍了Java中List分片方式详细解析,文章围绕主题展开详细的内容介绍,具有一定的参考价值,需要的小伙伴可以参考一下

前言

在日常开发中,经常会遇到持久层批量插入的需求,当批量插入的数据量比较大时,会导致执行报错,究其原因,是MySQL只能执行一定长度的SQL语句,若插入的数据量很多时,执行的插入语句就会很长,最终导致执行报错。

解决方式通常如下:

设置MySQL可以执行的SQL语句的最大长度;将List进行分片;

下面对List进行分片进行简单的分析。

将一个List分成多个小List的过程,即为分片,其实现方式有如下:

  • Google的Guava组件;
  • Apache的commons组件;
  • 国产的Hutool组件;
  • JDK8的Stream流;
  • 自定义;

1、Google的Guava组件方式

	public static void main(String[] args) {
        List<String> list = Arrays.asList("曹操,孙权,刘备,袁绍,张绣,马腾,张鲁".split(","));

        List<List<String>> partition = Lists.partition(list, 3);

        partition.forEach(i -> {
            System.out.println("子集合:" + i);
        });
    }

执行结果如下:

2、Apache的commons组件方式

	public static void main(String[] args) {
        List<String> list = Arrays.asList("曹操,孙权,刘备,袁绍,张绣,马腾,张鲁".split(","));

        List<List<String>> partition = ListUtils.partition(list, 3);

        partition.forEach(i -> {
            System.out.println("子集合:" + i);
        });
    }

执行结果同上。

3、国产的Hutool组件方式

	public static void main(String[] args) {
        List<String> list = Arrays.asList("曹操,孙权,刘备,袁绍,张绣,马腾,张鲁".split(","));

        List<List<String>> partition = ListUtil.partition(list,3);

        partition.forEach(i -> {
            System.out.println("子集合:" + i);
        });
    }

执行结果同上。

4、JDK8的Stream流方式

	public static void main(String[] args) {
        List<String> list = Arrays.asList("曹操,孙权,刘备,袁绍,张绣,马腾,张鲁".split(","));

        Map<Boolean, List<String>> collect = list.stream().collect(Collectors.partitioningBy(str -> {
            return str.equals("曹操");
        }));

        System.out.println(collect);
    }

执行结果如下:

5、自定义方式

	public static void main(String[] args) {
        List<String> list = Arrays.asList("曹操,孙权,刘备,袁绍,张绣,马腾,张鲁".split(","));

        List<String> subList = list.subList(0, 3);

        subList.forEach(i -> System.out.println(i));
    }

执行结果如下:

上面即为常见的List分片方式,可以根据具体需求和场景进行选择使用。

到此这篇关于Java中List分片方式详细解析的文章就介绍到这了,更多相关Java List分片内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Java实现弹窗效果的基本操作

    Java实现弹窗效果的基本操作

    这篇文章主要为大家详细介绍了Java实现弹窗效果的基本操作,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-07-07
  • hibernate-validator后端表单数据校验的使用示例详解

    hibernate-validator后端表单数据校验的使用示例详解

    这篇文章主要介绍了hibernate-validator后端表单数据校验的使用,hibernate-validator提供的校验方式为在类的属性上加入相应的注解来达到校验的目的,本文结合示例代码给大家介绍的非常详细,需要的朋友可以参考下
    2022-08-08
  • 详细总结Java创建文件夹的方法及优缺点

    详细总结Java创建文件夹的方法及优缺点

    很多小伙伴都不知道如何用Java创建文件夹,今天给大家整理了这篇文章,文中有非常详细的方法介绍及方法的优缺点,对正在学习java的小伙伴们有很好地帮助,需要的朋友可以参考下
    2021-05-05
  • springboot3解决跨域的几种方式小结

    springboot3解决跨域的几种方式小结

    这篇文章主要介绍了springboot3解决跨域的几种方式,文中通过代码示例给大家介绍的非常详细,对大家的解决跨域有一定的帮助,需要的朋友可以参考下
    2024-03-03
  • java 后端生成pdf模板合并单元格表格的案例

    java 后端生成pdf模板合并单元格表格的案例

    这篇文章主要介绍了java 后端生成pdf模板合并单元格表格的案例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-01-01
  • java中的动态代理与责任链模式详解

    java中的动态代理与责任链模式详解

    这篇文章主要介绍了java中的动态代理与责任链模式详解,动态代理提供了一种灵活且非侵入式的方式,可以对对象的行为进行定制和扩展,它在代码重用、解耦和业务逻辑分离、性能优化以及系统架构中起到了重要的作用,需要的朋友可以参考下
    2023-08-08
  • java多线程从入门到精通看这篇就够了

    java多线程从入门到精通看这篇就够了

    熟悉 Java 多线程编程的同学都知道,当我们线程创建过多时,容易引发内存溢出,因此我们就有必要使用线程池的技术了,今天通过本文给大家分享java多线程从入门到精通的相关知识,一起看看吧
    2021-06-06
  • Java向上转型和向下转型实例解析

    Java向上转型和向下转型实例解析

    这篇文章主要介绍了Java向上转型和向下转型实例解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-02-02
  • Java Optional的判空操作详解

    Java Optional的判空操作详解

    JAVA在1.8版本推出Optional,官方文档将其描述为可能包含或不包含非空值的容器对象,目前Optional用于避免程序出现异常NullPointerException,感兴趣的可以了解一下
    2022-09-09
  • Spring中Transactional注解使用的心得(推荐)

    Spring中Transactional注解使用的心得(推荐)

    这篇文章主要介绍了Spring中Transactional注解使用的心得,事务是用来控制数据的ACID特性的,用于保证数据的正确性和完整性,需要的朋友可以参考下
    2022-10-10

最新评论