簡體   English   中英

如何遍歷谷歌收藏的多圖 <?, Object> ?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM