/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package xmlparser;
import java.util.HashMap;
/**
*
* @author Pritom K Mondal
*/
public class HashMapMerge {
public static void main(String[] args) {
HashMap a = new HashMap();
/**
* First row
*/
HashMap b = new HashMap();
b.put("name", "name-1");
b.put("roll_0", "roll-11");
b.put("roll_1", "roll-12");
HashMap b10 = new HashMap();
b10.put("item_0", 0);
b10.put("item_1", 1);
b.put("item_0", b10);
HashMap c = new HashMap();
c.put("name", "name-2");
c.put("roll", "roll-2");
HashMap d = new HashMap();
d.put("student_0", b);
d.put("student_1", c);
d.put("student_2", "TATA");
/**
* Second row
*/
HashMap b1 = new HashMap();
b1.put("grade", "grade-1");
HashMap c10 = new HashMap();
c10.put("item_2", 33);
c10.put("item_3", 44);
b1.put("item_0", c10);
HashMap c1 = new HashMap();
c1.put("grade", "grade-2");
HashMap d1 = new HashMap();
d1.put("student_0", b1);
d1.put("student_1", c1);
d1.put("student_2", b1);
System.out.println(d);
System.out.println(d1);
HashMapMerge hashMapMerge = new HashMapMerge();
a = hashMapMerge.merge(d, d1);
System.out.println(a);
}
public HashMap merge(HashMap a, HashMap b) {
HashMap c = new HashMap();
for(Object key : a.keySet()) {
String key2 = (String) key;
Object dup = a.get(key2);
c.put(key2, dup);
}
for(Object key : b.keySet()) {
String key2 = (String) key;
Object dup = b.get(key2);
if(dup instanceof HashMap && c.containsKey(key2)
&& c.get(key2) instanceof HashMap) {
HashMap kk = (HashMap) c.get(key2);
HashMap p = merge(kk, (HashMap) dup);
c.put(key2, p);
} else if(dup instanceof HashMap && c.containsKey(key2)
&& !(c.get(key2) instanceof HashMap)) {
HashMap kk = new HashMap();
kk.put(key2, c.get(key2));
HashMap p = merge(kk, (HashMap) dup);
c.put(key2, p);
} else {
c.put(key2, dup);
}
}
return c;
}
}
Input map 1:
{
student_1={
roll=roll-2,
name=name-2
},
student_0={
item_0={
item_1=1,
item_0=0
},
roll_0=roll-11,
roll_1=roll-12,
name=name-1
},
student_2=TATA
}
Input map 2:
{
student_1={
grade=grade-2
},
student_0={
item_0={
item_3=44,
item_2=33
},
grade=grade-1
},
student_2={
item_0={
item_3=44,
item_2=33
},
grade=grade-1
}
}
And result map after merge:
{
student_1={
roll=roll-2,
name=name-2,
grade=grade-2
},
student_0={
item_0={
item_1=1,
item_0=0,
item_3=44,
item_2=33
},
roll_0=roll-11,
name=name-1,
roll_1=roll-12,
grade=grade-1
},
student_2={
student_2=TATA,
item_0={
item_3=44,
item_2=33
},
grade=grade-1
}
}