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

如何遍历嵌套ArrayList并将Pessoal实例存入指定数组?

如何嵌套遍历ArrayList并将元素存入数组

问题背景

我有一个存储Pessoal类型实例的数组:

Pessoal[] teste = new Pessoal[6];

另外有两个ArrayList,都被存入了另一个ArrayList中:

static ArrayList<Pessoal> lista_de_profs; // 包含4个Pessoal实例
static ArrayList<Pessoal> lista_de_infos; // 包含2个Pessoal实例,总数与teste数组长度6匹配

// 两个ArrayList中存储的都是Pessoal类型实例
ArrayList<ArrayList<Pessoal>> lista_de_docentes = new ArrayList<>();
 
lista_de_docentes.add(lista_de_profs); 
lista_de_docentes.add(lista_de_infos);

我需要遍历lista_de_docentes中的所有子ArrayList,取出里面的Pessoal实例并存入teste数组。目前我只能实现单个ArrayList的数据存入数组(当teste长度为4时可行):

for (int i = 0; i < teste.length; i++){
     teste[i] = lista_de_profs.get(i);
}

但这段代码只处理了一个ArrayList,我需要处理lista_de_docentes里的所有子集合。

注:部分变量为葡萄牙语命名,可替换为英文(比如lista_de_profs改为professorsList,lista_de_infos改为infosList,lista_de_docentes改为teachersList)


解决方案

方法一:嵌套循环+索引追踪

用外层循环遍历lista_de_docentes里的每个子ArrayList,内层循环遍历子ArrayList的元素,同时用单独的索引变量记录teste数组的当前存入位置:

int arrayIndex = 0; // 追踪teste数组的当前存入位置
// 外层循环遍历每个子ArrayList
for (ArrayList<Pessoal> subList : lista_de_docentes) {
    // 内层循环遍历子ArrayList中的每个Pessoal实例
    for (Pessoal pessoa : subList) {
        teste[arrayIndex] = pessoa;
        arrayIndex++;
    }
}

这种方法逻辑清晰,适配所有Java版本,能确保元素按顺序存入数组(先存lista_de_profs的4个元素,再存lista_de_infos的2个元素)。

方法二:Java 8+ 流操作(更简洁)

如果使用Java 8及以上版本,可通过流的扁平化操作简化代码:

// 将嵌套的ArrayList扁平化为单个Stream,再转为数组
Pessoal[] result = lista_de_docentes.stream()
    .flatMap(List::stream) // 扁平化所有子集合的元素
    .toArray(Pessoal[]::new);

// 存入已有的teste数组
System.arraycopy(result, 0, teste, 0, result.length);

或者直接在流操作中完成赋值:

int[] index = {0}; // 用数组包装索引,适配lambda对变量的引用要求
lista_de_docentes.stream()
    .flatMap(List::stream)
    .forEach(pessoa -> teste[index[0]++] = pessoa);

注意事项

  • 确保teste数组的长度等于所有子ArrayList的元素总数,否则会抛出ArrayIndexOutOfBoundsException异常。
  • 上述两种方法都会保持元素的原有顺序(外层循环的顺序+子ArrayList内部的顺序)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 00:50:28