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

使用Gson解析JSON生成嵌套列表时数据全部存入同一子列表如何解决

问题根因

你出现这个问题的核心原因是drivePID列表只在循环外初始化了一次,Java中集合对象是引用传递,你每次往driveLists里添加的都是同一个drivePID对象的引用。后续循环中往drivePID里新增元素时,driveLists里所有指向该对象的条目都会同步更新,就出现了所有子列表内容完全一致、数据不断累加的问题。

解决方案

将drivePID的初始化逻辑移到遍历posList的循环内部,保证每次循环都生成一个全新的子列表存储当前组的PID参数。

修改后代码片段

String json = readFileAsString(file);
System.out.println(json);

JsonManager manager = new Gson().fromJson(json, new TypeToken<JsonManager>() {}.getType());

List<PosData> posList = manager.getPositions();
List<Double> xList = new ArrayList<>();
List<Double> yList = new ArrayList<>();
List<Double> thetaList = new ArrayList<>();
List<List<Double>> driveLists = new ArrayList<List<Double>>();


for (PosData pos : posList) {
    xList.add(pos.getX());
    yList.add(pos.getY());
    thetaList.add(pos.getTheta());
    // 每次循环新建独立的子列表存储当前PID参数
    List<Double> drivePID = new ArrayList<>();
    for(PidData pid : pos.getDrive()){
        drivePID.add(pid.getP());
        drivePID.add(pid.getI());
        drivePID.add(pid.getD());
        break;
    }

    driveLists.add(drivePID);
    
    System.out.println(drivePID);
    System.out.println(driveLists);
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 22:39:01