2012-09-06 43 views
8

我遇到了一個我以前沒有處理過的問題。我正在爲java中的數據庫寫一個補丁,基本上是轉換某些行中存儲的數據。爲了做到這一點,我有一個轉換表,告訴我什麼樣的值變成了什麼。使用預定義的值填充hashmap(java)

例如,如果我讀了「RC」,「AC」,「GH」 - >將值更新爲「T1」。 (這些只是隨機的例子,它基本上是將一個字符串轉換爲另一個字符串。)

我需要一個很好的方式來存儲這些轉換。我在想一個hashmap: KEY,VALUE:(RC,T1)(AC,T1)(GH,T1)等等。

現在,這裏有幾十個。修補程序初始化時填充此散列映射的乾淨方式是什麼?

回答

18

在設置的HashMap

例如

private static final Map<String, String> m = new HashMap<String, String>() {{ 
    put("RC", "T1"); 
    put("AC", "T1"); 
}}; 

然後你貴方覺得確保一切都設置在一起,在你的代碼中,我會做初始化。

我認爲@Nambari是一個很好的觀點,儘管可能有值作爲列表而不僅僅是一個字符串。這然後交換您的鍵和值。

private static final Map<String, List<String>> m = new HashMap<String, List<String>>() {{ 
    put("T1", Arrays.asList("RC", "AC"); 
}}; 
+0

謝謝!這就是我的想法(你的第一個例子)。我希望可能有一個非常乾淨的做法,但我想我將不得不沮喪和骯髒。非常感謝RNJ的確認。 – user1652875

+0

@ user1652875我認爲在聲明的相同位置進行初始化的時候會稍微整齊些。那麼你肯定知道地圖確實包含了一些數據。 – RNJ

0

可能是其他方式,列表RC,AC,GH作爲值和T1作爲hashmap的關鍵字,這樣可以減少map中的條目數量。

+0

但是,在這種結構中查找的複雜性將不會是什麼好 - 你會怎麼搜查該地圖的話,說擡頭爲「RC」的替代品是什麼時候? –

+0

我同意,如果你有更少的鍵(如T1,T2等),這是簡單的方法。如果少了鍵,你可以得到entrySet()並使用它。如果按鍵數量也很高,那麼查找時間會很長。再次,它是折衷的,在一個地方的簡單性在另一端造成複雜性。 – kosa

0

您可以使用PropertiesConfiguration從Apache的百科全書。

值可以包含值分隔符,然後將被解釋爲令牌列表。默認值分隔符是逗號','。所以下面的屬性定義

key = This property, has multiple, values