guava:迭代Multimap的key->集合条目的最佳方法?

时间:2011-07-12 17:40:40

标签: guava loops 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);
}

2 个答案:

答案 0 :(得分:13)

他们都有效;第二个往往更容易阅读(特别是你可以从List获得实际的ListMultimap等等),但第一个可能更有效(在某种程度上可能或对你来说可能并不重要。)

答案 1 :(得分:3)

我想说,根据你的需要,番石榴人很体贴,可以让你做任何一种方式。例如,如果结构确实很重要,并且您希望以分组方式查看多图,则后者将是优先的。 OTOH,如果您希望将多重映射视为一组键值对,其中重复键无关紧要,您可能更喜欢使用mmap.entries。实际上,在使用多图表的情况下,最合适的是什么。