Java 将值放入地图的地图中

Java 将值放入地图的地图中,java,concurrenthashmap,Java,Concurrenthashmap,我试图从java的命令行中读取数据 假设我正在从命令行传递这些参数- TABLE1 TABLE2 TABLE3 然后在从命令提示符读取后,tableNameslist将具有上述三个表名 private static List<String> tableNames= new ArrayList<String>(); 我不确定这是否是将值放入地图的正确方式?或者我可以稍微改进一下?您需要做的主要事情是将databaseDetails映射的创建移动到for循环中。此时,每次

我试图从java的命令行中读取数据

假设我正在从命令行传递这些参数-

TABLE1 TABLE2 TABLE3
然后在从命令提示符读取后,
tableNames
list将具有上述三个表名

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

我不确定这是否是将值放入地图的正确方式?或者我可以稍微改进一下?

您需要做的主要事情是将databaseDetails映射的创建移动到for循环中。此时,每次通过循环时,您都会覆盖在上一次迭代中提取的细节。每次循环时,您都在收集一组新的databaseDetails,因此需要一个新的databaseDetails映射来将它们放入其中。

这样,表列表中只有一个映射。您应该在每次迭代中创建一个新的databaseDetails映射。因此,删除databaseDetails成员变量,而不是在循环中使用局部变量。

保持简单!您可以将所有键存储在一个映射中,只需在键的前面加上“TABLEx”。避免不必要的强制转换:prop.getProperty(arg+”.url)+1对于getProperty,我完全忘记了。:用作数据库详细信息映射的键。感谢Rafeel的建议。是的,看起来我可以在这里列举。你能给我一个小例子,让我明白如何在我的代码中使用它吗?
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);
}