class Solution {
static HashMap<String, String> flattenDictionary(HashMap<String, Object> dict) {
HashMap<String, String>result = new HashMap<String, String>();
flattenNesting("", dict, result);
return result;
}
private static void flattenNesting(String parent, Map<String, Object> dict, Map<String,
String> result) {
for (Map.Entry<String, Object> entry : dict.entrySet()) {
if (entry.getValue() instanceof String) {
putEntryInResult(parent, result, entry);
} else {
flattenNextLevel(parent, result, entry);
}
}
}
private static void flattenNextLevel(String parent, Map<String, String> result,
Map.Entry<String, Object> entry) {
if (parent.isEmpty()) {
flattenNesting(entry.getKey(), (Map<String, Object>) entry.getValue(), result);
} else {
String key = entry.getKey().isEmpty() ? parent : parent + "." + entry.getKey();
flattenNesting(key, (Map<String, Object>) entry.getValue(), result);
}
}
private static void putEntryInResult(String parent, Map<String, String> result,
Map.Entry<String, Object> entry) {
if (parent.isEmpty()) {
result.put(entry.getKey(), entry.getValue().toString());
} else {
String key = entry.getKey().isEmpty() ? parent : parent + "." + entry.getKey();
result.put(key, entry.getValue().toString());
}
}
public static void main(String[] args) {
HashMap<String, Object> dict = new HashMap<String, Object>();
dict.put("key1", "1");
HashMap<String, Object> c = new HashMap<String, Object>();
c.put("d", "3"); c.put("e", "1");
HashMap<String, Object> key2 = new HashMap<String, Object>();
key2.put("a", "2");
key2.put("b", "3");
key2.put("c", c);
dict.put("key2", key2);
}
}