27

我必须遍历谷歌多地图。但

  1. 我正在使用 jdk 1.4 并且无法切换到更高版本。所以我不能使用通用功能。
  2. 我的多重映射可以有多个键值。
  3. 可能存在一种情况,即 multimap 的值本身就是 multimap
4

4 回答 4

53

Google Collections(现在的 Guava)是一个 Java 1.5 库......即使忽略 Java 1.4 中缺乏泛型,它也可能使用 1.5 中添加的东西,使其不兼容。也就是说,有多种方法可以遍历Multimap.

Java8 中的集合对:

multimap.asMap().forEach((key, collection) -> {...});

遍历所有值:

for (Object value : multimap.values()) { ... }

遍历所有键(映射到迭代中多次出现的多个值的键):

for (Object key : multimap.keys()) { ... }

遍历键集:

for (Object key : multimap.keySet()) { ... }

遍历条目:

for (Map.Entry entry : multimap.entries()) { ... }

遍历值Collections:

for (Collection collection : multimap.asMap().values()) { ... }

您还可以按照 bwawok 的描述在usingCollection中获取每个键的对应项。keySet()get

编辑:我没有想到 Java 1.4 也没有 foreach 循环,所以当然上面的每个循环都必须Iterator直接使用 s 编写。

于 2010-10-14T16:21:41.653 回答
11

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

    }

每次获取都会让您找回与该密钥匹配的所有内容。然后你可以剥掉它们,或者对它们做任何你想做的事情。

于 2010-10-14T15:58:19.100 回答
5

使用 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);
        }
    }
于 2017-02-02T08:16:47.053 回答
-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]
于 2020-03-19T10:13:22.587 回答