2010-04-04 57 views
4

鑰匙是一個文件和一個字。該文件給出文件內的所有單詞。這個詞讓所有文件都有這個詞。我不確定域和共域部分。我想K是<String>的類型,V是<HashSet<FileObject>>Java:如何使用Google的HashBiMap?

public HashBiMap<K<String>,V<HashSet<FileObject>>> wordToFiles 
      = new HashBiMap<K<String>,V<HashSet<FileObject>>>(); 

    public HashBiMap<K<String>,V<HashSet<FileObject>>> fileToWords 
      = new HashBiMap<K<String>,V<HashSet<FileObject>>>(); 

Google's HashBiMap.

+0

那麼是什麼問題,是什麼呢? – Thomas 2010-04-04 14:25:10

+1

@Thomas:問題是沒有公共構造函數 – Roman 2010-04-04 14:25:57

回答

15

將其更改爲

public HashBiMap<String,HashSet<FileObject>> wordToFiles = HashBiMap.create(); 

但它仍然看起來很奇怪。我認爲你應該使用另一個集合。從BiMap文檔(HashBiMap impelements BiMap):

甲bimap的(或「雙向映射」)是 地圖,可以保留 其值的唯一性以及其 鍵。這個約束使bimps 支持「反向視圖」,這是另一個bimap包含相同的 條目作爲這個bimap,但與 顛倒的鍵和值。

我不知道你想解決的問題,但看了你的代碼後,我可以建議考慮使用Multimaps。從它的文檔:

類似地圖的集合,而是 可以與單個鍵關聯 多個值。如果您撥打(K, V)兩次,使用相同的密鑰但不同的值,則多圖 包含從密鑰到 值的映射。

例如,你可以這樣做:

Multimap<String, FileObject> wordToFiles = HashMultimap.create(); 
wordToFiles.put("first", somefile); 
wordToFiles.put("first", anotherfile); 
for (FileObject file : wordToFiles.get("first"){ 
    doSomethingWithFile (file); 
} 
8

加入這個依賴於你的 '的build.gradle'

compile 'com.google.guava:guava:19.0' 

進口BIMAP和HashBiMap

import com.google.common.collect.BiMap; 
import com.google.common.collect.HashBiMap; 

創建一個bimap

BiMap<String, String> myBiMap = HashBiMap.create(); 

把一些價值

的關鍵
myBiMap.put("key", "value"); 

獲取映射值

myBiMap.get("key"); 

值獲取映射,

myBiMap.inverse().get("value"); 
相關問題