我需要遍历谷歌的 multimap,但是:
- 我使用的是jdk 1.4版本,无法切换到更高的版本。所以我不能使用泛型功能。
- 我的 multimap 可以有多个值对应一个键。
- 可能存在多层嵌套的情况,即 multimap 的值本身也是一个 multimap。
Google Collections(现在叫做Guava)是一个Java1.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
的集合:
for (Collection collection : multimap.asMap().values()) { ... }
你也可以使用`get`方法从`keySet()`中获取每个键对应的`Collection`,这正如bwawok所描述的那样。我使用的是Java 6,但应该很接近...如果我漏掉了什么像Java 1.4的东西,请见谅。
Set keySet = listmultimap.keySet();
Iterator keyIterator = keySet.iterator();
while (keyIterator.hasNext() ) {
String key = (String) keyIterator.next();
List values = listmultimap.get( key );
}
每个 get 都将获取与该键匹配的所有内容。然后您可以将它们剥离,或者按照您想要的方式进行操作。
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]
HashMap<String, HashSet<String>>
这样的东西,而没有使用多重映射。 - ycomp