Как выполнить итерацию через multimap Google
Мне нужно перебирать через multimap Google. Но
- Я использую jdk 1.4 и не могу переключиться на более высокую версию. Поэтому я не могу использовать общие функции.
- Мой мультимап может иметь несколько значений для ключа.
- Может возникнуть ситуация, когда значение multimap является мультимапом в себе
Ответы
Ответ 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);
}
}