如何迭代google multimap

时间:2010-10-14 14:50:42

标签: java guava multimap

我必须遍历google multimap。但

  1. 我使用的是jdk 1.4,无法切换到更高版本。所以我不能使用通用功能。
  2. 我的多重映射可以有一个键的多个值。
  3. 当多图的值本身是多图时,可能会出现这种情况

4 个答案:

答案 0 :(得分:45)

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来编写直接。

答案 1 :(得分:10)

我在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 );

    }

每次获取都会获得与该键匹配的所有内容。然后你可以剥掉它们,也可以随心所欲地做任何事情。

答案 2 :(得分:2)

使用guava multimap时,值存储在Collection中,而不是List

 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);
        }
    }

答案 3 :(得分:-1)

一个最小的例子是:

public class Test {
    public static void main(String[] args) {
        ListMultimap<String, String> multimap = ArrayListMultimap.create();

        multimap.put("hello", " name");
        multimap.put("hello", " name2");
        multimap.put("world", " ocean");

        for (String firstName : multimap.keySet()) {
            List<String> lastNames = multimap.get(firstName);
            System.out.println(firstName + " " + lastNames);
        }
    }
}

和输出:

world [ ocean]
hello [ name,  name2]