Вопрос

Я должен повторять Google MultiMap. Но

  1. Я использую JDK 1.4 и не могу переключиться на более высокую версию. Так что я не могу использовать общие функции.
  2. Мой MultiMAP может иметь несколько значений для ключа.
  3. Там может быть ситуация, когда значение MultiMap является MultiMap сам по себе
Это было полезно?

Решение

Коллекции Google (теперь 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()) { ... }

Или значение CollectionS:

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

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

Редактировать: Я не думал о том, что Java 1.4 тоже не имел петли FOREACH, поэтому, конечно, каждая петля выше должна быть написана с помощью IteratorS напрямую.

Другие советы

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

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

    }

Каждое получение получит вам все обратно, соответствующее этому ключу. Тогда вы можете либо очистить их, либо делать все, что вы хотите с ними.

Когда вы используете Guava MultiMap, значения хранятся в коллекции, а не в списке

 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);
        }
    }
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top