讓我們地圖:如何扭轉一個地圖
- A - > {1,2,3}
- 乙 - > {3,4,5}
- Ç - > {2 ,3,5}
我需要扭轉此映射,將獲得:
- 1 - > {A}
- 2 - > {A,C}
- 3 - > {A,B,C}
- 4 - > {B}
- 5 - > {B,C}
我實現使用此代碼:
public static <U, V> Map<V, Set<U>> reverseMap(Map<U, Set<V>> map) {
Map<V, Set<U>> result = Maps.newHashMap();
for(Map.Entry<U, Set<V>> entry : map.entrySet()) {
for(V value : entry.getValue()) {
Set<U> set = result.get(value);
if(set == null) {
set = Sets.newHashSet();
result.put(value, set);
}
set.add(entry.getKey());
result.put(value, set);
}
}
return result;
}
但這只是一個反向索引,所以我認爲可能存在預定義的方法在某處做這件事。
有人知道這樣的圖書館嗎? Guava中的一種方法?
我想你要找的是Multimaps(http://code.google.com/p/guava-libraries/wiki/CollectionUtilitiesExplained#Multimaps),尤其是http://docs.guava-libraries.googlecode.com/ git-history/release/javadoc/com/google/common/collect/Multimaps.html#invertFrom%28com.google.common.collect.Multimap,%20M%29 –
@ArnaudDenoyelle Hm,很對。我收回我的陳述。 – Smallhacker