Я предпочитаю создавать пользовательскую карту, которая расширяет HashMap. Затем просто переопределите get (), чтобы добавить дополнительную логику, чтобы, если карта не содержит ваш ключ. Он создаст новый экземпляр вложенной карты, добавит его и вернет.
public class KMap<K, V> extends HashMap<K, V> {
public KMap() {
super();
}
@Override
public V get(Object key) {
if (this.containsKey(key)) {
return super.get(key);
} else {
Map<K, V> value = new KMap<K, V>();
super.put((K)key, (V)value);
return (V)value;
}
}
}
Теперь вы можете использовать его так:
Map<Integer, Map<Integer, Map<String, Object>>> nestedMap = new KMap<Integer, Map<Integer, Map<String, Object>>>();
Map<String, Object> map = (Map<String, Object>) nestedMap.get(1).get(2);
Object obj= new Object();
map.put(someKey, obj);