【发布时间】:2010-10-14 14:50:42
【问题描述】:
我必须遍历谷歌多地图。但是
- 我使用的是 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()) { ... }
遍历值Collections:
for (Collection collection : multimap.asMap().values()) { ... }
您还可以使用get 为keySet() 中的每个键获取对应的Collection,如bwawok 所述。
编辑:我没有想到 Java 1.4 也没有 foreach 循环,所以当然上面的每个循环都必须直接使用 Iterators 编写.
【讨论】:
HashMap<String, HashSet<String>> 这样的东西,而不是使用多地图
我使用的是 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]
【讨论】: