Skip to content

Instantly share code, notes, and snippets.

@jessalfredsen
Created April 17, 2015 11:41
Show Gist options
  • Select an option

  • Save jessalfredsen/8ee964dc333b732bea85 to your computer and use it in GitHub Desktop.

Select an option

Save jessalfredsen/8ee964dc333b732bea85 to your computer and use it in GitHub Desktop.
deepMerge in Java Maps
import java.util.HashMap;
import java.util.Map;
import java.util.List;
import java.util.ArrayList;
public class HelloWorld{
public static void main(String []args){
System.out.println("Hello World");
Map vehicles = new HashMap();
// Add some vehicles.
vehicles.put("BMW", 5);
vehicles.put("Mercedes", 3);
vehicles.put("Audi", 4);
vehicles.put("Ford", 10);
ArrayList wheels = new ArrayList();
wheels.add(15);
wheels.add(16);
vehicles.put("wheels", wheels);
Map vehicles2 = new HashMap();
vehicles2.put("Ford", 20);
ArrayList wheels2 = new ArrayList();
wheels2.add(18);
vehicles2.put("wheels", wheels2);
System.out.println("Total vehicles: " + vehicles.size());
System.out.println("wheels: " + vehicles.get("wheels"));
Map vehicles_final = deepMerge(vehicles, vehicles2);
System.out.println("Total vehicles: " + vehicles_final.size());
System.out.println("wheels: " + vehicles_final.get("wheels"));
}
// This is fancier than Map.putAll(Map)
private static Map deepMerge(Map original, Map newMap) {
for (Object key : newMap.keySet()) {
if (newMap.get(key) instanceof Map && original.get(key) instanceof Map) {
Map originalChild = (Map) original.get(key);
Map newChild = (Map) newMap.get(key);
original.put(key, deepMerge(originalChild, newChild));
} else if (newMap.get(key) instanceof List && original.get(key) instanceof List) {
List originalChild = (List) original.get(key);
List newChild = (List) newMap.get(key);
for (Object each : newChild) {
originalChild.add(each);
}
} else {
original.put(key, newMap.get(key));
}
}
return original;
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment