/* * 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 } }