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. Это действительно вопрос того, что наиболее подходит в контексте использования вашего мультимапа.