[英]How to iterate through google collections' Multimap<?, Object>?
在使用谷歌收藏之前,我有類似下面的代碼:
private Set<A> aSet = ...;
private Set<B> bSet = ...;
public Foo getFoo (Map<?, List<Bar>> bars, Set<?> set) {
for (Object item : set) {
for (Bar bar : bars.get (item)) {
//build foo;
}
}
...
}
這樣我就可以撥打電話:
Map<A, List<Bar> aMap = getAMap ();
Foo f1 = getFoo (aMap, aSet);
Map<B, List<Bar> bMap = getBMap ();
Foo f2 = getFoo (bMap, bSet);
現在,使用Multimap,我無法做到這一點:
public Foo getFoo (Multimap<?, List<Bar>> bars, Set<?> set) {
for (Object item : set) {
// compile error: get(capture#621 of ?) in Multimap ... cannot be applied to java.lang.Object
for (Bar bar : bars.get (item)) {
//build foo;
}
}
...
}
嘗試這個:
public <T> Foo getFoo (Multimap<T, List<Bar>> bars, Set<T> set) {
for (T item : aSet) {
// compile error: get(capture#621 of ?) in Multimap ... cannot be applied to java.lang.Object
for (Bar bar : bars.get (item)) {
//build foo;
}
}
...
}
編輯:
如果看到兩個類的javadoc,您將意識到Map的javadoc是:
V get(Object key)
對於MultiMap是:
Collection<V> get(K key)
請參閱未生成Map參數。
MultiMap
更適合通用,但是Map的設計使其具有與Java 1.4以前的Map
向后兼容性。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.