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 如何实现AES加密

    Java 如何实现AES加密

    这篇文章主要介绍了Java 如何实现AES加密,帮助大家完成对接,完成自身需求,感兴趣的朋友可以了解下
    2020-10-10
  • JAVA中实现原生的 socket 通信机制原理

    JAVA中实现原生的 socket 通信机制原理

    本篇文章主要介绍了JAVA中实现原生的 socket 通信机制原理,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-08-08
  • Java简单数组排序(冒泡法)

    Java简单数组排序(冒泡法)

    这篇文章主要介绍了Java简单数组排序,实例分析了基于冒泡法实现数组排序的相关技巧,简单实用,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-10-10
  • 说一说java关键字final和transient

    说一说java关键字final和transient

    这篇文章主要和大家说一说java关键字final和transient,感兴趣的小伙伴们可以参考一下
    2016-06-06
  • Jenkins+Git+Maven自动化部署配置详解

    Jenkins+Git+Maven自动化部署配置详解

    本文主要介绍了Jenkins+Git+Maven自动化部署配置详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-01-01
  • Java 从网上下载文件的几种方式实例代码详解

    Java 从网上下载文件的几种方式实例代码详解

    本文通过实例代码给大家介绍了java从网上下载文件的几种方式,非常不错,具有参考借鉴价值,需要的的朋友参考下吧
    2017-08-08
  • springboot多环境进行动态配置的方法

    springboot多环境进行动态配置的方法

    这篇文章主要介绍了springboot多环境下如何进行动态配置,本文主要分享了如何在springboot的项目中使用多环境配置,重点是”spring.profiles.active“属性,需要的朋友可以参考下
    2022-06-06
  • Mybatis-plus:${ew.sqlselect}用法说明

    Mybatis-plus:${ew.sqlselect}用法说明

    这篇文章主要介绍了Mybatis-plus:${ew.sqlselect}用法说明,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-06-06
  • JAVA Vector源码解析和示例代码

    JAVA Vector源码解析和示例代码

    本文的学习方式是先对JAVA Vector有个整体认识,然后再学习它的源码,最后再通过实例来学会使用。
    2013-11-11
  • Java8 新特性Lambda表达式实例详解

    Java8 新特性Lambda表达式实例详解

    这篇文章主要介绍了Java8 新特性Lambda表达式实例详解的相关资料,需要的朋友可以参考下
    2017-03-03

最新评论