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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 11:06:03