Guava: Лучший способ перебора элементов key-> коллекции Multimap?
Я ищу соответствующий способ, Multimap
, чтобы перебирать записи Map
, а именно:
Map<K,V> map = ...;
for (Map.Entry<K,V> entry : map.entrySet())
{
K k = entry.getKey();
V v = entry.getValue();
}
Какое из следующего лучше? (или, что еще важнее, каковы различия?)
Multimap<K,V> mmap = ...;
for (Map.Entry<K,Collection<V>> entry : mmap.asMap().entrySet())
{
K k = entry.getKey();
Collection<V> v = entry.getValue();
}
или
Multimap<K,V> mmap = ...;
for (K k : mmap.keySet())
{
Collection<V> v = mmap.get(k);
}
Ответы
Ответ 1
Они оба действительны; второй, как правило, намного легче читать (тем более, что вы можете получить фактический List
из ListMultimap
и т.д.), но первый может быть более эффективным (в той степени, которая может или не имеет значения для вы).
Ответ 2
Я бы сказал, что люди Гуавы были достаточно внимательны, чтобы позволить вам сделать это в любом случае, в зависимости от ваших потребностей. Например, если структура важна, и вы хотите просмотреть свою мультимапую сгруппированным образом, последнее будет предпочтительным. OTOH, если вы хотите просмотреть мультимап в виде набора пар ключ-значение, где дублирующие ключи несущественны, вы можете использовать mmap.entries. Это действительно вопрос того, что наиболее подходит в контексте использования вашего мультимапа.