2012-09-06 4 views
8

У меня возникла проблема, с которой мне раньше не приходилось иметь дело. Я пишу патч для базы данных в Java, который в основном преобразует данные, хранящиеся в определенных строках. Для этого у меня есть таблица преобразования, которая подсказывает мне, какие значения становятся тем.Заполнение хэш-карты с предопределенными значениями (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"); 
}}; 

Тогда вы wuld убедитесь, что все настроено вместе в вашем коде.

Я думаю, что @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

Может быть другим способом, List RC,AC,GH как значение и T1 как ключ для hashmap, таким образом вы можете уменьшить количество записей на карте.

+0

Но сложность поиска в такой структуре не будет никакой пользы - как бы вы искать такую ​​карту, то, скажем, при взгляде на замену «RC»? –

+0

Согласен, это простой подход, если у вас меньше клавиш (например, T1, T2 и т. Д.). Если меньше клавиш, вы можете получить entrySet() и играть с ним. Если количество клавиш также велико, время поиска будет высоким. Опять же, это компромисс, простота в одном месте создает сложность на другом конце. – kosa

0

Вы можете использовать PropertiesConfiguration от Apache Commons.

Значение может содержать разделители значений и затем будет интерпретироваться как список токенов. Разделитель значений по умолчанию - это запятая ','. Таким образом, следующее свойство определения

key = This property, has multiple, values 
Смежные вопросы