2013-07-31 26 views
0

下面是一個例子方法:載入地圖與不存在的密鑰,否則加載默認

public void loadStuff(Map<String, Object> someMap) { 
    Map<String, Object> myMap = new HashMap<String, Object>(); 

    //I now load defaults here first 
    myMap.put("One", someObject); 
    myMap.put("two", someObject); 
    myMap.put("three", someObject); 

    //Now I put the entire someMap so that only those keys that are present in someMap are overridden in myMap and others remain default. 
    myMap.putAll(someMap); 
} 

現在,有做這些多餘的看跌期權作爲我的情況下違約數量的更好的方式是一許多。從別的

// Alternatively, you could use clone() 
Map<String, Object> myMap = new HashMap<String, Object>(defaults); 
myMap.putAll(someMap); 

除了這意味着你可以加載從屬性中的「默認地圖」的文件或什麼:

+0

這看起來很簡單,我認爲這並不是那麼糟糕;順便說一句,在你的例子'default'是一個Java保留的關鍵字,使用別的東西。 – MightyPork

回答

2

考慮創建您的默認設置一個初始地圖,然後再使用。

如果你真的不喜歡它會把每個值放兩次的事實,你可以編寫一個循環來檢查每個鍵 - 但我個人只是使​​用上面的代碼。這很簡單,它應該很好。

1

你想爲一些項目預加載一個單一的答案,還是你想爲所有未被發現的鍵設置默認值?如果要將默認答案從null更改爲其他內容,請參閱this question。如果你想預加載一些項目,那麼你需要put所有這些,儘管最好不要像這樣的代碼中嵌入值;而是使用for循環來遍歷一個正式的密鑰列表。

如果您要頻繁地初始化此Map的空白副本,那麼使用模板Map將更有意義,其中每個myMapis constructed from;包裝爲不可修飾的HashMap或番石榴ImmutableMap是很好的選擇。從已有的Map構建,而不是將所有元素複製到新的HashMap中,因爲新的知道自己有多大,所以更有效率。