Как проиграть через Google MultiMap
Вопрос
Я должен повторять Google MultiMap. Но
- Я использую JDK 1.4 и не могу переключиться на более высокую версию. Так что я не могу использовать общие функции.
- Мой MultiMAP может иметь несколько значений для ключа.
- Там может быть ситуация, когда значение 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()) { ... }
Или значение Collection
S:
for (Collection collection : multimap.asMap().values()) { ... }
Вы также можете получить соответствующий Collection
Для каждого ключа в keySet()
с использованием get
Как описано BWAWOK.
Редактировать: Я не думал о том, что Java 1.4 тоже не имел петли FOREACH, поэтому, конечно, каждая петля выше должна быть написана с помощью Iterator
S напрямую.
Другие советы
Я на 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);
}
}