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

如何遍历Java嵌套数组并为每个元素创建Person模型?

嵌套Person模型转换解决方案

问题说明

需将API返回的无限层级嵌套Persons结构(每个对象包含name、age、children三个字段),转换为对应的PersonModel嵌套结构:每个PersonModel需对应层级的列表,若存在children,则包含对应子层级的PersonModel列表。当前代码仅覆盖第一层嵌套,需通过递归实现完整转换。

示例结构(API返回格式):

{
  "Persons": [
    {"name": "John", "age": 18, "children": null},
    {"name": "Lisa", "age": 32, "children": [{"name": "Tyler", "age": 7, "children": null}]},
    {"name": "Mike", "age": 90, "children": [
      {"name": "Derek", "age": 50, "children": [
        {"name": "Mary", "age":25, "children": null},
        {"name": "Beth", "age":16, "children": null}
      ]}
    ]}
  ]
}

解决方案:递归转换实现

核心思路是写一个递归转换方法,负责将单个API返回的Person对象转换为PersonModel,同时递归处理其所有子节点。重构后的代码如下:

private void loadPersons(String id) {
    ListPersonsApi.Request request = Jso.create();
    request.id = id;

    dispatcher.send(ListPersonsApi.PATH, request, r -> {
        // 转换所有顶层Person,生成对应的PersonModel列表
        List<PersonModel> topLevelPersonModels = new ArrayList<>();
        for (ListPersonsApi.persons apiPerson : r.persons) {
            topLevelPersonModels.add(convertToPersonModel(apiPerson));
        }
        // 将顶层列表赋值给目标parent的children
        parent.children = topLevelPersonModels;
    });
}

// 递归方法:将API返回的Person转换为PersonModel,自动处理嵌套子节点
private PersonModel convertToPersonModel(ListPersonsApi.persons apiPerson) {
    PersonModel model = new PersonModel();
    // 赋值基础属性
    model.name = apiPerson.name;
    model.age = apiPerson.age;

    // 处理子节点:若存在子列表,递归转换每个子节点
    if (apiPerson.children != null && !apiPerson.children.isEmpty()) {
        List<PersonModel> childModels = new ArrayList<>();
        for (ListPersonsApi.persons childApiPerson : apiPerson.children) {
            childModels.add(convertToPersonModel(childApiPerson));
        }
        model.children = childModels;
    } else {
        // 无子节点时设为null,匹配示例结构
        model.children = null;
    }

    return model;
}

代码说明

  1. 顶层转换:在loadPersons中遍历API返回的所有顶层Person,调用递归方法生成对应的PersonModel,收集为列表后赋值给目标parent的children。
  2. 递归核心:convertToPersonModel完成单个对象的转换:
    • 先创建PersonModel并赋值name、age
    • 若当前对象有children,则遍历每个子对象,递归调用自身生成子模型,收集后赋值给当前模型的children
    • 无子节点时将children设为null,保持和输入结构一致
  3. 优点:自动适配任意深度的嵌套结构,逻辑清晰,避免了原代码中循环嵌套的混乱逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 03:28:17