使用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
相关产品推荐
相关产品推荐

