guava: Лучший способ перебрать ключевые-> коллекции записей Multimap? - PullRequest
11 голосов
/ 12 июля 2011

Я ищу соответствующий способ для 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);
}

Ответы [ 2 ]

13 голосов
/ 14 июля 2011

Они оба действительны; второе имеет тенденцию быть намного легче читаемым (особенно когда вы можете получить фактическое List из ListMultimap и т. д.), но первое может быть более эффективным (до степени, которая может иметь или не иметь значение для вы).

3 голосов
/ 12 июля 2011

Я бы сказал, что люди из Гуавы были достаточно внимательны, чтобы позволить вам сделать это в любом случае, в зависимости от ваших потребностей.Например, если структура важна, и вы хотите просмотреть свою мультикарту в сгруппированном виде, последний будет предпочтительным.OTOH, если вы хотите просмотреть мультикарту в виде набора пар ключ-значение, где повторяющиеся ключи незначительны, вы можете использовать mmap.entries.Это действительно вопрос того, что наиболее уместно в контексте использования вашей мультикарты.

...