Java如何将数据库查询的UUID列表存入TreeMap避免值被覆盖
问题根源
覆盖问题的核心原因是你固定使用1作为TreeMap的键:Map结构的键具有唯一性,同一个键重复执行put操作时,新值会直接覆盖旧值,属于Map的基础特性。
你后续新增的迭代器逻辑完全无效:初始化迭代器时validatingJobs还是空集合,it.hasNext()永远返回false,这部分冗余逻辑可以直接删除。
修改方案
直接用循环的索引值+1作为键即可实现你需要的1、2、3...递增键效果,修改后的代码如下:
TreeMap<Integer,String> validatingJobs=new TreeMap<Integer,String>(); callArray.enqueue(new Callback<SyncResponse>() { @Override public void onResponse(@NotNull Call<SyncResponse> call, @NotNull Response<SyncResponse> response) { Log.d("Call request", bodyToString(call.request())); Log.d("Response raw header", response.headers().toString()); Log.d("Response raw", String.valueOf(response.raw().body())); Log.d("Response code", String.valueOf(response.code())); SyncResponse data = response.body(); if (data == null) { Log.d("NOTICE", "Empty response body"); return; } if (data.getJobs() != null) { for (int i=0; i<data.getJobs().size(); i++) { jobRepository.insert(data.getJobs().get(i)); // 用i+1作为递增键,避免覆盖 validatingJobs.put(i+1, String.valueOf(data.getJobs().get(i).getUuid())); } // 遍历输出放在循环外即可,无需每次插入都遍历 for (Map.Entry<Integer, String> entry : validatingJobs.entrySet()) { Log.d("MAP KEY ", String.valueOf(entry.getKey())); Log.d("MAP VALUE ", String.valueOf(entry.getValue())); } } } });
补充说明
如果你需要多次调用接口往同一个validatingJobs里追加数据,不需要每次清空Map,插入时取当前Map的最大键+1作为新键即可:
// 追加数据时的键生成逻辑 int newKey = validatingJobs.isEmpty() ? 1 : validatingJobs.lastKey() + 1; validatingJobs.put(newKey, uuid值);
内容的提问来源于stack exchange,提问作者KCYrgn
相关产品推荐
相关产品推荐

