Подтвердить что ты не робот

Как выполнить итерацию через multimap Google

Мне нужно перебирать через multimap Google. Но

  • Я использую jdk 1.4 и не могу переключиться на более высокую версию. Поэтому я не могу использовать общие функции.
  • Мой мультимап может иметь несколько значений для ключа.
  • Может возникнуть ситуация, когда значение multimap является мультимапом в себе
4b9b3361

Ответ 1

Google Collections (теперь Guava) - это библиотека Java 1.5... даже игнорируя отсутствие дженериков в Java 1.4, она, вероятно, использует вещи, которые были добавлены в 1.5, что делает ее несовместимой. Тем не менее, существуют различные способы итерации через Multimap.

Вы можете выполнять итерацию по всем значениям:

for (Object value : multimap.values()) { ... }

Или все клавиши (ключ, который несколько раз отображает несколько значений на итерации):

for (Object key : multimap.keys()) { ... }

Или набор клавиш:

for (Object key : multimap.keySet()) { ... }

Или записи:

for (Map.Entry entry : multimap.entries()) { ... }

Или значение Collection s:

for (Collection collection : multimap.asMap().values()) { ... }

Вы также можете получить соответствующий Collection для каждого ключа в keySet(), используя get, как описано bwawok.

Изменить: Я не думал о том, что Java 1.4 не имеет цикла foreach, поэтому, конечно, каждый цикл выше должен быть написан с помощью Iterator напрямую.

Ответ 2

Я на Java 6, но это должно быть довольно близко... извините, если я пропустил что-то java 1.4ish

    Set keySet = listmultimap.keySet();
    Iterator keyIterator = keySet.iterator();
    while (keyIterator.hasNext() ) {
        String key = (String) keyIterator.next();
        List values = listmultimap.get( key );

    }

Каждый get получит все, что соответствует этому ключу. Затем вы можете очистить их или сделать все, что хотите с ними.

Ответ 3

При использовании мультимапа guava значения хранятся в коллекции, а не в списке

 Set<String> keys = multiMap.keySet();
    for (String keyprint : keys) {
        System.out.println("Key = " + keyprint);
        Collection<String> values = multiMap.get(keyprint);
        for(String value : values){
            System.out.println("Value= "+ value);
        }
    }