我必须遍历谷歌多地图。但
- 我正在使用 jdk 1.4 并且无法切换到更高版本。所以我不能使用通用功能。
- 我的多重映射可以有多个键值。
- 可能存在一种情况,即 multimap 的值本身就是 multimap
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()) { ... }
遍历值Collection
s:
for (Collection collection : multimap.asMap().values()) { ... }
您还可以按照 bwawok 的描述在usingCollection
中获取每个键的对应项。keySet()
get
编辑:我没有想到 Java 1.4 也没有 foreach 循环,所以当然上面的每个循环都必须Iterator
直接使用 s 编写。
我在 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 );
}
每次获取都会让您找回与该密钥匹配的所有内容。然后你可以剥掉它们,或者对它们做任何你想做的事情。
使用 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);
}
}
一个最小的例子是:
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]