首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在Java中使用for循环创建映射时,Kep的值始终保持为0

在Java中使用for循环创建映射时,Kep的值始终保持为0
EN

Stack Overflow用户
提问于 2019-01-30 17:51:34
回答 1查看 72关注 0票数 0

我正在尝试向Map<String, Map<String, Object>>添加一个Map<String, Object>

代码如下:

代码语言:javascript
运行
复制
Map<String, Object> createmap = new HashMap<String, Object>();
Map<String, Object> result = new HashMap<String, Object>();

for (int j=0 ; j<jsonarr2.size(); j++ )
{
    JSONObject jsonobj2 = (JSONObject) jsonarr2.get(j);
    Iterator<String> key2 = jsonobj2.keySet().iterator();
    while (key2.hasNext()) {
        String k2 = key2.next();
        createmap.put(k2, jsonobj2.get(k2));    
    }
    System.out.println("Print J:" + j + " CREATE MAP:" + createmap);
    result.put(Integer.toString(j),createmap);
    System.out.println("result :" + result);
}

For循环运行5次,在createmap中将有5条记录。但是映射result总是使用键0,因此在result映射中只有createmap的最后一条记录可用。

循环内print语句的输出:

代码语言:javascript
运行
复制
Print J:0 CREATE MAP:{vsan_name={"value":{"0":{"sequence":0,"value":"VSAN0001","timestamp":1548643752}}}}
result : {0={vsan_name={"value":{"0":{"sequence":0,"value":"VSAN0001","timestamp":1548643752}}}}}
Print J:1 CREATE MAP:{vsan_name={"value":{"0":{"sequence":0,"value":"VSAN0002","timestamp":1548643752}}}}
result : {0={vsan_name={"value":{"0":{"sequence":0,"value":"VSAN0002","timestamp":1548643752}}}}}
Print J:2 CREATE MAP:{vsan_name={"value":{"0":{"sequence":0,"value":"VSAN0003","timestamp":1548643752}}}}
result : {0={vsan_name={"value":{"0":{"sequence":0,"value":"VSAN0003","timestamp":1548643752}}}}}
Print J:3 CREATE MAP:{vsan_name={"value":{"0":{"sequence":0,"value":"VSAN0004","timestamp":1548643752}}}}
result : {0={vsan_name={"value":{"0":{"sequence":0,"value":"VSAN0004","timestamp":1548643752}}}}}
Print J:4 CREATE MAP:{vsan_name={"value":{"0":{"sequence":0,"value":"VSAN0005","timestamp":1548643752}}}}
result : {0={vsan_name={"value":{"0":{"sequence":0,"value":"VSAN0005","timestamp":1548643752}}}}}

但是最终的Map只有

代码语言:javascript
运行
复制
{0={vsan_name={"value":{"0":{"sequence":0,"value":"VSAN0005","timestamp":1548643752}}}}}

键始终保持为0,并且值将更新为相同的键。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-01-30 17:54:12

看起来jsonarr2.size()是1,因此循环只运行一次(即使嵌套的JSONObject有5个键。

此外,您可能会从json数组中跨不同的json对象获取具有相同键的记录。尝试在for循环中移动createMap的实例化,例如:

代码语言:javascript
运行
复制
Map<String, Object> result = new HashMap<String, Object>();

for (int j=0 ; j<jsonarr2.size(); j++ )
{
    Map<String, Object> createmap = new HashMap<String, Object>();
    JSONObject jsonobj2 = (JSONObject) jsonarr2.get(j);
    Iterator<String> key2 = jsonobj2.keySet().iterator();
    while (key2.hasNext()) {
        String k2 = key2.next();
        createmap.put(k2, jsonobj2.get(k2));    
    }
    System.out.println("Print J:" + j + " CREATE MAP:" + createmap);
    result.put(Integer.toString(j),createmap);
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54437657

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档