Java中将一个列表拆分为多个较小列表的三种不同方法

 更新时间:2023年09月07日 11:03:08   作者:xixiyuguang  
有时候我们需要将大集合按指定的数量分割成若干个小集合,这篇文章主要给大家介绍了关于Java中将一个列表拆分为多个较小列表的三种不同方法,文中通过代码介绍的非常详细,需要的朋友可以参考下

前言

在Java中,有多种方法可以将一个列表拆分为多个较小的列表。在本文中,我们将介绍三种不同的方法来实现这一目标。

方法一:使用List.subList()方法

List接口提供了一个subList()方法,它可以用来获取列表中的一部分元素。我们可以使用这个方法来将一个列表拆分为多个较小的列表。

下面是一个简单的示例,它展示了如何使用subList()方法来将一个列表拆分为多个较小的列表:

import java.util.ArrayList;
import java.util.List;
public class Main {
    public static void main(String[] args) {
        List<Integer> list = new ArrayList<>();
        for (int i = 0; i < 10; i++) {
            list.add(i);
        }
        int chunkSize = 3;
        int numOfChunks = (int) Math.ceil((double) list.size() / chunkSize);
        List<List<Integer>> chunks = new ArrayList<>(numOfChunks);
        for (int i = 0; i < numOfChunks; i++) {
            int fromIndex = i * chunkSize;
            int toIndex = Math.min(fromIndex + chunkSize, list.size());
            chunks.add(list.subList(fromIndex, toIndex));
        }
        for (List<Integer> chunk : chunks) {
            System.out.println(chunk);
        }
    }
}

在上面的代码中,我们首先创建了一个包含10个元素的列表。然后,我们定义了一个变量chunkSize来表示每个子列表的大小。接下来,我们计算出需要拆分成多少个子列表,并创建一个新的列表来保存这些子列表。

然后,我们使用一个循环来遍历每个子列表,并使用subList()方法来获取原始列表中对应的元素。最后,我们将每个子列表添加到保存子列表的列表中。

运行上面的代码后,您会看到输出如下:

[0, 1, 2]
[3, 4, 5]
[6, 7, 8]
[9]

方法二:使用Java 8流和收集器

如果您使用的是Java 8或更高版本,您可以使用流(Stream)和收集器(Collector)来简化上面的代码。下面是一个简单的示例,它展示了如何使用流和收集器来将一个列表拆分为多个较小的列表:

import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.IntStream;
public class Main {
    public static void main(String[] args) {
        List<Integer> list = IntStream.range(0, 10).boxed().collect(Collectors.toList());
        int chunkSize = 3;
        List<List<Integer>> chunks = IntStream.range(0, (list.size() + chunkSize - 1) / chunkSize)
            .mapToObj(i -> list.subList(i * chunkSize, Math.min((i + 1) * chunkSize, list.size())))
            .collect(Collectors.toList());
        chunks.forEach(System.out::println);
    }
}

在上面的代码中,我们首先使用IntStream.range()方法和Collectors.toList()收集器来创建一个包含10个元素的列表。然后,我们定义了一个变量chunkSize来表示每个子列表的大小。

接下来,我们使用IntStream.range()方法和mapToObj()方法来遍历每个子列表,并使用subList()方法来获取原始列表中对应的元素。最后,我们使用Collectors.toList()收集器来将所有子列表收集到一个新的列表中。

方法三:使用Guava库

如果您想使用Guava库来拆分列表,您可以使用Lists.partition()方法。这个方法接受两个参数:一个列表和一个整数,它会将列表拆分为指定大小的子列表。

下面是一个简单的示例,它展示了如何使用Lists.partition()方法来将一个列表拆分为多个较小的列表:

import com.google.common.collect.Lists;
import java.util.List;
public class Main {
    public static void main(String[] args) {
        List<Integer> list = Lists.newArrayList(0, 1, 2, 3, 4, 5, 6, 7, 8, 9);
        int chunkSize = 3;
        List<List<Integer>> chunks = Lists.partition(list, chunkSize);
        for (List<Integer> chunk : chunks) {
            System.out.println(chunk);
        }
    }
}

在上面的代码中,我们首先使用Lists.newArrayList()方法来创建一个包含10个元素的列表。然后,我们定义了一个变量chunkSize来表示每个子列表的大小。接下来,我们使用Lists.partition()方法来将原始列表拆分为多个子列表。

运行上面的代码后,您会看到输出与前面的示例相同。

总结

到此这篇关于Java中将一个列表拆分为多个较小列表的三种不同方法的文章就介绍到这了,更多相关Java列表拆分多个较小列表内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Java最全文件操作实例汇总

    Java最全文件操作实例汇总

    这篇文章主要介绍了Java最全文件操作,总结分析了大量实例,详细汇总了Java针对文件的各种常用操作,需要的朋友可以参考下
    2015-11-11
  • Springboot实现通用Auth认证的几种方式

    Springboot实现通用Auth认证的几种方式

    本文主要介绍了Springboot实现通用Auth认证的几种方式,主要介绍了4种方式,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-07-07
  • 基于spring+springmvc+hibernate 整合深入剖析

    基于spring+springmvc+hibernate 整合深入剖析

    这篇文章主要介绍了于spring+springmvc+hibernate整合实例,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-10-10
  • SpringBoot中使用MyBatis-Plus实现分页接口的详细教程

    SpringBoot中使用MyBatis-Plus实现分页接口的详细教程

    MyBatis-Plus是一个MyBatis的增强工具,在MyBatis的基础上只做增强不做改变,为简化开发、提高效率而生,在SpringBoot项目中使用MyBatis-Plus可以大大简化分页逻辑的编写,本文将介绍如何在 SpringBoot项目中使用MyBatis-Plus实现分页接口
    2024-03-03
  • Mybatis实现自定义的typehandler三步曲

    Mybatis实现自定义的typehandler三步曲

    这篇文章主要介绍了Mybatis实现自定义的typehandler三步曲的相关资料,非常不错,具有参考借鉴价值,需要的朋友可以参考下
    2016-07-07
  • java实现PDF转图片的方法

    java实现PDF转图片的方法

    这篇文章主要为大家详细介绍了java实现PDF转图片的方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-07-07
  • mybatis中一对一关系association标签的使用

    mybatis中一对一关系association标签的使用

    这篇文章主要介绍了mybatis中一对一关系association标签的使用,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-03-03
  • SSM使用mybatis分页插件pagehepler实现分页示例

    SSM使用mybatis分页插件pagehepler实现分页示例

    本篇文章主要介绍了SSM使用mybatis分页插件pagehepler实现分页示例,使用分页插件的原因,简化了sql代码的写法,实现较好的物理分页,非常具有实用价值,需要的朋友可以参考下
    2018-03-03
  • Java 中的 @SneakyThrows 注解的使用方法(简化异常处理的利与弊)

    Java 中的 @SneakyThrows 注解的使用方法(简化异常处理的利与弊)

    @SneakyThrows是Lombok提供的一个注解,用于简化Java方法中的异常处理,特别是对于检查型异常,它允许方法抛出异常而不必显式声明或捕获这些异常,本文介绍Java 中的 @SneakyThrows 注解的使用方法,感兴趣的朋友一起看看吧
    2025-03-03
  • 详细聊聊Mybatis中万能的Map

    详细聊聊Mybatis中万能的Map

    最近有个需求,就是使用mybatis时,向mysql中插入数据,其参数为map类型,下面这篇文章主要给大家介绍了关于Mybatis中万能的Map的相关资料,需要的朋友可以参考下
    2021-12-12

最新评论