Reputation: 337
Hi Folks i have looked at below mention question for answer but it was not helpful as they give answer for static value while i need to get value from dynamic approch
How to put/get values into/from Nested HashMap
Getting value from Nested HashMap into another Map
How do I access nested HashMaps in Java?
This is my Scenario :
This is my class for adding and retrieving data from HashMap :-
HashMap<Integer, String> xmlQueryNode = new HashMap<Integer, String>();
HashMap<Integer, HashMap<Integer, String>> splunkHashMap = new HashMap<Integer, HashMap<Integer, String>>();
id = 0;
xmlQueryNode.put(0, "F0name");
xmlQueryNode.put(1, "L0name");
xmlQueryNode.put(2, "M0name");
splunkHashMap.put(id, xmlQueryNode);
id = 1;
xmlQueryNode.put(0, "F1name");
xmlQueryNode.put(1, "L1name");
xmlQueryNode.put(2, "M1name");
splunkHashMap.put(id, xmlQueryNode);
id = 2;
xmlQueryNode.put(0, "F2name");
xmlQueryNode.put(1, "L2name");
xmlQueryNode.put(2, "M2name");
splunkHashMap.put(id, xmlQueryNode);
id = 3;
xmlQueryNode.put(0, "F3name");
xmlQueryNode.put(1, "L3name");
xmlQueryNode.put(2, "M3name");
splunkHashMap.put(id, xmlQueryNode);
for (Integer key : splunkHashMap.keySet()) {
HashMap<Integer, String> temp = new HashMap<Integer, String>();
//System.out.println(key);
temp = otsdbQueryData.get(key);
for(Integer key1: temp.keySet()){
System.out.println(temp.get(key1));
}
}
Problem with this code is that i get below output for all 4 entries :-
F3name
L3name
M3name
F3name
L3name
M3name
F3name
L3name
M3name
F3name
L3name
M3name
Can anyone point me where i am making mistake because My hashmaps are being overwritten by last inserted hashmap??
Upvotes: 0
Views: 642
Reputation: 2006
after put inner hashmap you need to reinitialise that map.
xmlQueryNode = new HashMap<Integer,String>();
xmlQueryNode.put(0, "F1name");
xmlQueryNode.put(1, "L1name");
xmlQueryNode.put(2, "M1name");
otherwise it will update the same reference.
Please check the updated code.
int id =0;
HashMap<Integer, String> xmlQueryNode = new HashMap<Integer, String>();
HashMap<Integer, HashMap<Integer, String>> splunkHashMap = new HashMap<Integer, HashMap<Integer, String>>();
id = 0;
xmlQueryNode.put(0, "F0name");
xmlQueryNode.put(1, "L0name");
xmlQueryNode.put(2, "M0name");
splunkHashMap.put(id, xmlQueryNode);
xmlQueryNode = new HashMap<Integer, String>();
id = 1;
xmlQueryNode.put(0, "F1name");
xmlQueryNode.put(1, "L1name");
xmlQueryNode.put(2, "M1name");
splunkHashMap.put(id, xmlQueryNode);
xmlQueryNode = new HashMap<Integer, String>();
id = 2;
xmlQueryNode.put(0, "F2name");
xmlQueryNode.put(1, "L2name");
xmlQueryNode.put(2, "M2name");
splunkHashMap.put(id, xmlQueryNode);
xmlQueryNode = new HashMap<Integer, String>();
id = 3;
xmlQueryNode.put(0, "F3name");
xmlQueryNode.put(1, "L3name");
xmlQueryNode.put(2, "M3name");
splunkHashMap.put(id, xmlQueryNode);
for (Integer key : splunkHashMap.keySet()) {
HashMap<Integer, String> temp = new HashMap<Integer, String>();
//System.out.println(key);
temp = splunkHashMap.get(key);
for(Integer key1: temp.keySet()){
System.out.println(temp.get(key1));
}
}
Upvotes: 2
Reputation: 5843
xmlQueryNode reference is getting overwritten again and again. Check below code.
HashMap<Integer, String> xmlQueryNode = new HashMap<Integer, String>();
HashMap<Integer, HashMap<Integer, String>> splunkHashMap = new HashMap<Integer, HashMap<Integer, String>>();
id = 0;
xmlQueryNode.put(0, "F0name");
xmlQueryNode.put(1, "L0name");
xmlQueryNode.put(2, "M0name");
splunkHashMap.put(id, xmlQueryNode);
id = 1;
xmlQueryNode = new HashMap<Integer,String>();
xmlQueryNode.put(0, "F1name");
xmlQueryNode.put(1, "L1name");
xmlQueryNode.put(2, "M1name");
splunkHashMap.put(id, xmlQueryNode);
id = 2;
xmlQueryNode = new HashMap<Integer,String>();
xmlQueryNode.put(0, "F2name");
xmlQueryNode.put(1, "L2name");
xmlQueryNode.put(2, "M2name");
splunkHashMap.put(id, xmlQueryNode);
id = 3;
xmlQueryNode = new HashMap<Integer,String>();
xmlQueryNode.put(0, "F3name");
xmlQueryNode.put(1, "L3name");
xmlQueryNode.put(2, "M3name");
splunkHashMap.put(id, xmlQueryNode);
for (Integer key : splunkHashMap.keySet()) {
HashMap<Integer, String> temp = new HashMap<Integer, String>();
//System.out.println(key);
temp = otsdbQueryData.get(key);
for(Integer key1: temp.keySet()){
System.out.println(temp.get(key1));
}
}
Upvotes: 0