You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java如何将List按固定大小拆分生成嵌套子列表?

Java 列表按固定大小拆分实现方案

针对正则提取得到的单层字符串列表,按每3个元素为一组拆分为嵌套列表的需求,可通过以下几种方式实现:

无第三方依赖 原生实现(兼容所有Java版本)

直接手写通用分片方法,不需要引入任何外部依赖,适配所有JDK版本:

import java.util.ArrayList;
import java.util.List;

public class ListSplit {
    public static <T> List<List<T>> split(List<T> source, int chunkSize) {
        List<List<T>> result = new ArrayList<>();
        if (source == null || source.isEmpty() || chunkSize < 1) {
            return result;
        }
        int total = source.size();
        int chunkNum = (total + chunkSize - 1) / chunkSize;
        for (int i = 0; i < chunkNum; i++) {
            int start = i * chunkSize;
            int end = Math.min(start + chunkSize, total);
            // 用new ArrayList包裹subList结果,生成独立子列表,避免原列表修改影响分片
            result.add(new ArrayList<>(source.subList(start, end)));
        }
        return result;
    }

    public static void main(String[] args) {
        // 替换为你的正则提取得到的data列表即可
        List<String> data = List.of("text", "text2", "text3", "text4", "text5", "text6");
        List<List<String>> nestedList = split(data, 3);
        // 输出结果:[[text, text2, text3], [text4, text5, text6]]
        System.out.println(nestedList);
    }
}

注意:List.subList()返回的是原列表的视图,不是独立的新列表,必须做一层拷贝,否则后续修改原列表会导致分片内容异常。

Java 8+ 流式实现

如果你的项目使用JDK8及以上版本,可以用Stream流更简洁地实现:

int chunkSize = 3;
List<List<String>> nestedList = IntStream.range(0, (data.size() + chunkSize - 1) / chunkSize)
        .mapToObj(i -> data.subList(i * chunkSize, Math.min(i * chunkSize + chunkSize, data.size())))
        .map(ArrayList::new)
        .toList();

第三方工具类直接调用

如果项目中已经引入常用工具类依赖,可以直接调用封装好的分片方法,不需要自己写逻辑:

  • Guava 工具类:List<List<String>> nestedList = Lists.partition(data, 3);
  • Apache Commons Collections 工具类:List<List<String>> nestedList = ListUtils.partition(data, 3);

注意:上述两个工具类的partition方法返回的同样是原列表视图,需要独立子列表时要手动做一层ArrayList拷贝。

内容的提问来源于stack exchange,提问作者Mix32

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.27 19:24:22