只需一步即可在HashMap中声明和放置String数组

我试图将静态数据插入Java中的HashMap ,如下所示:

HashMap instruments = new HashMap(); instruments.put("EURUSD", {"4001","EURUSD","10000","0.00001","0.1","USD"}); 

但编译器不喜欢它。 我发现将数据插入HashMap的唯一方法是分别声明字符串数组,然后将其放入HashMap中,就像这样

 String[] instruDetails = {"4001","EURUSD","10000","0.00001","0.1","USD"}; instruments.put("EURUSD", instruDetails); 

但它不是很富有表现力,也很难维护

所以我的问题是,有没有办法在一个步骤/行中执行put()操作和字符串数组声明?

这样做:

 instruments.put("EURUSD", new String[]{"4001","EURUSD","10000","0.00001","0.1","USD"}); 

要在一个句子中全部使用,请使用双括号初始化: –

  HashMap instruments = new HashMap() { { put("EURUSD", new String[]{"4001","EURUSD","10000","0.00001","0.1","USD"}); put("EUR", new String[]{"4001","EURUSD","10000","0.00001","0.1","USD"}); } }; 

我想你已经有了它的作品。 但原因是

 instruments.put("EURUSD", {"4001","EURUSD","10000","0.00001","0.1","USD"}); 

不起作用是因为{"4001","EURUSD","10000","0.00001","0.1","USD"}{}是用于初始化的Java数组中的语法糖或快捷方式。 它带有一个约束,它总是必须与数组声明语句一起使用,否则它是一个语法错误。

数组声明语句就好

 String[] array = {"1", "2"}; 

这样Java就知道它需要为你创建的数组实际上是String类型元素。

如果您违反以上声明如下

 String[] array; array = {"1", "2"}; 

它不编译。

使用new String[]{"4001","EURUSD","10000","0.00001","0.1","USD"} ,编译器知道它必须实例化一个新的数组,其元素类型是Stringnew String[] )并使用您提供的值初始化新实例化的数组( {"4001","EURUSD","10000","0.00001","0.1","USD"} )。