Я пытаюсь поместить Map<String, Object>
в Map<String, Map<String, Object>>
.
Ниже приведен код:
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.Но карта result
всегда использует ключ как 0 и, следовательно, на карте result
доступна только последняя запись createmap
.
Вывод оператора print внутри цикла:
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
есть только
{0={vsan_name={"value":{"0":{"sequence":0,"value":"VSAN0005","timestamp":1548643752}}}}}
Ключ все время остается равным 0и значение обновляется до того же ключа.