2013-02-12 2 views
0

Я пытаюсь прочитать из командной строки в java.Ввод значений в Map of Map

Предположим, если я передаю эти параметры из команды лайн-

TABLE1 TABLE2 TABLE3 

Затем после чтения из командной строки, tableNames список будет иметь все вышеуказанные три таблицы имен.

private static List<String> tableNames= new ArrayList<String>(); 

Теперь мне нужно перебрать эту tableNames и поставить все в ConcurrentHashMap, загрузив соответствующие значения из файла свойств.

Так как я делаю это что-то вроде этого.

private static ConcurrentHashMap< String, 
    ConcurrentHashMap< String, String >> tableList = new ConcurrentHashMap<>(); 
private static ConcurrentHashMap<String, 
    String >      databaseDetails = new ConcurrentHashMap<>(); 
prop.load(MainTest.class.getClassLoader().getResourceAsStream("config.properties")); 
for (String arg : tableNames) { 
    String url = (String) prop.get(arg + ".url"); 
    String user = (String) prop.get(arg + ".user"); 
    String password = (String) prop.get(arg + ".password"); 
    String driver = (String) prop.get(arg + ".driver"); 
    String suffix = (String) prop.get(arg + ".suffix"); 
    String sql = (String) prop.get(arg + ".sql"); 
    databaseDetails.put("URL",url); 
    databaseDetails.put("USER",user); 
    databaseDetails.put("PASSWORD",password); 
    databaseDetails.put("DRIVER",driver); 
    databaseDetails.put("SUFFIX",suffix); 
    databaseDetails.put("SQL",sql); 
    tableList.put(arg,databaseDetails); 
} 

Я не уверен, что это правильный способ поместить значения в карту карты? Или я могу улучшить это немного лучше?

+1

держите его простым! вы можете хранить все ключи на одной карте, просто префикс ключей с помощью «TABLEx». –

+1

Избегайте ненужных бросков: prop.getProperty (arg + ".url"); – Aubin

+0

+1 для getProperty, я полностью это забыл. – AKIWEB

ответ

1

Главное, что вам нужно сделать, это переместить создание базы данныхDetails в пределах цикла for. В настоящий момент каждый раз через цикл вы переписываете детали, которые вы извлекли на предыдущей итерации. Каждый раз, когда вы зацикливаете, вы собираете свежий набор данных базы данных и, следовательно, нуждаетесь в новой карте базы данныхDetails для их ввода.

1

Таким образом, у вас будет только одна карта в списке таблиц. На каждой итерации вы должны создать новую карту базы данных. Поэтому удалите переменную-член базы данныхDetails вместо использования локальной переменной в цикле.

Смежные вопросы