我必须遍历google multimap。但
答案 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]