2009-02-10 6 views
1

Дано:Как добавить внутреннее отображение во вложенную коллекцию?

Object nestKey; 
Object nestedKey; 
Object nestedValue; 

Map<T,Map<T,T>> nest; 
Map<T,T> nested; 

Как добавляется отображение в вложенными где:

nest.containsKey (nestKey) == TRUE;

?

Или существует ли существующая библиотека коллекций, которая была бы более эффективной?

ответ

1

Вы имеете в виду что-то вроде следующих общего метода?

static <U,V,W> W putNestedEntry(
     Map<U,Map<V,W>> nest, 
     U nestKey, 
     V nestedKey, 
     W nestedValue) 
{ 
    Map<V,W> nested = nest.get(nestKey); 

    if (nested == null) 
    { 
     nested = new HashMap<V,W>(); 
     nest.put(nestKey, nested); 
    } 

    return nested.put(nestedKey, nestedValue);   
} 
+0

Я пытался обмануть выход из установки, вложенной в nest.get (nestKey). То, что я собирался сделать, это глупая ошибка. Спасибо за проверку реальности. – WolfmanDragon

0

Не уверен, что вы имеете в виду. Я думаю, что вы хотите добавить к вложенной карте, как следующее:

nest.get(nestKey).put(nestedKey, nestedValue); 

Это невозможно, потому что прибудет на внешней карте возвращает карту типа Map<?, ?>. Вы не можете вызвать метод put на нем. Неограниченный подстановочный знак?? следует использовать, если вы не знаете тип содержимого коллекции, но хотите считать их объектами. Если вы хотите прочитать и изменить содержимое, а Map имеет гетерогенные объекты, вы можете просто использовать raw-тип. Это что-то вроде:

Map<?, Map> nest; 

Лучший способ, конечно (если это возможно), чтобы использовать гомогенный карту и указать его тип. Например. Map<String, String>

+0

Вы правильно интерпретируете то, что я имел в виду. Я имел в виду, чтобы это было общим, я изменю это на использование generics как типы. – WolfmanDragon

1

Это довольно распространенная идиома либо:

  • есть карта карты, как вы предлагаете
  • имеют одну карту, где ваши ключи объединить «главный» ключ и «подключ» (возможно, более эффективное использование пространства, но в целом менее подходит, если вам нужно итерация ключи и подразделы)
+0

Компоновка ключа и подраздела как использование нескольких ключей в SQL для создания первичного ключа, но вместо этого выполняется с конкатенацией? – WolfmanDragon

0

Попробуйте

if (nest.containsKey (nestKey)) { ((Карта) nest.get (nestKey)). Put (nestedKey, nestedValue); }