2012-01-30 2 views
2

У меня есть Map of Maps, который выглядит следующим образом:Как обновить карту внутри карты?

Map<String, Map<String, Object>> data; 

Я хочу, чтобы обновить внутреннюю карту.

Должен ли я делать следующее каждый раз, когда я хочу обновить внутреннюю оболочку или есть ли другой прямой/лучший способ ее достижения?

Map<String, Object> innerMap = data.get("outer_key"); 
innerMap.put("inner_key", value); 
data.put("outer_key", innerMap); 
+2

'inner.put ("inner_key", значение);', это должно быть 'innerMap.put ("inner_key", значение); '? – yannis

+1

Вам не нужна третья строка. Вы делитесь ссылкой на один экземпляр (внутренняя карта). – allingeek

ответ

3

Я думаю, у вас может быть опечатка, и я предполагаю, что inner на самом деле innerMap. Я бы, вероятно, изменить его немного, чтобы учесть null значений во внешней карте:

Map<String, Object> innerMap = data.get("outer_key"); 

// Added this if statement to handle null values in the outer map. 
if (innerMap == null) { 
    innerMap = new HashMap<String, Object>(); 
    data.put("outer_key", innerMap); 
} 

innerMap.put("inner_key", value); 
// data.put("outer_key", innerMap); <-- This is not needed, innerMap is already a value in 
            // the outer map. 
+0

Спасибо, часть «<- Это не нужно ...» помогает! – 500865

2

Вы можете рассмотреть возможность использования библиотеки Google гуавы, который имеет класс Table (в основном отображение карт):

http://guava-libraries.googlecode.com/svn/trunk/javadoc/com/google/common/collect/Table.html

Тогда у вас есть доступный метод пут, который принимает строку, столбец, и значение (что немного проще).

+0

Спасибо за информацию. Полезно знать о библиотеке guava. – 500865

Смежные вопросы