Как добавить внутреннее сопоставление во вложенную коллекцию? - PullRequest
1 голос
/ 10 февраля 2009

Дано:

Object nestKey;
Object nestedKey;
Object nestedValue;

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

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

nest.containsKey (nestKey) == true;

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

Ответы [ 4 ]

1 голос
/ 10 февраля 2009

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

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);        
}
1 голос
/ 10 февраля 2009

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

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

Попробуйте это

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

0 голосов
/ 10 февраля 2009

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

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

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

Map<?, Map> nest;

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...