java 实现将 List 分成多个指定大小的子 List

2021-05-14  本文已影响0人  惜鸟

一、概述

在开发过程中有这样一个需求,想要把一个 List 分成多个指定大小的子 List,需求很简单,这里记录一下使用两种方式实现:

二、写 Java 代码实现

实现代码如下所示:

    public static <T> List<List<T>> partition(List<T> list, int size) {
        List<List<T>> result = new ArrayList<>();
        if (list == null) {
            throw new NullPointerException("list 不能为 null");
        }
        if (size <= 0) {
            throw new IllegalArgumentException("size 必须大于 0");
        }
        if (list.size() < size) {
            result.add(list);
        } else {
            int r = list.size() / size;
            for (int i = 0; i < r; i++) {
                List<T> subList = list.subList(i * size, (i + 1) * size);
                result.add(subList);
            }
            if (r * size < list.size()) {
                List<T> subList = list.subList(r * size, list.size());
                result.add(subList);
            }
        }
        return result;
    }

三、使用 guava 提供的工具类实现

第一步:添加依赖

<!-- https://mvnrepository.com/artifact/com.google.guava/guava -->
<dependency>
    <groupId>com.google.guava</groupId>
    <artifactId>guava</artifactId>
    <version>30.0-jre</version>
</dependency>

第二步:调用 Lists.partition

public static void main(String[] args) {
    List<String> idList = new ArrayList<>();
    for (int i = 0; i < 25; i++) {
        idList.add(UUID.randomUUID().toString());
    }
    List<List<String>> partition = Lists.partition(idList, 3);
    for (List<String> strings : partition) {
        System.out.println(strings.size());
        System.out.println(strings);
    }
}
上一篇 下一篇

猜你喜欢

热点阅读