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

jul*_*e64 5 java arrays hashmap

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

HashMap<String,String[]> instruments = new HashMap<String, String[]>();
instruments.put("EURUSD", {"4001","EURUSD","10000","0.00001","0.1","USD"});
Run Code Online (Sandbox Code Playgroud)

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

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

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

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

Baz*_*Baz 12

这样做:

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


Roh*_*ain 8

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

 HashMap<String,String[]> instruments = new HashMap<String, String[]>() {
     {
      put("EURUSD", new String[]{"4001","EURUSD","10000","0.00001","0.1","USD"});
      put("EUR", new String[]{"4001","EURUSD","10000","0.00001","0.1","USD"});
     }
 };
Run Code Online (Sandbox Code Playgroud)


Bhe*_*ung 6

我想你已经有了什么有效.但原因是

instruments.put("EURUSD", {"4001","EURUSD","10000","0.00001","0.1","USD"});
Run Code Online (Sandbox Code Playgroud)

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

数组声明语句就好

String[] array = {"1", "2"};
Run Code Online (Sandbox Code Playgroud)

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

如果你打破上述声明如下

String[] array;
array = {"1", "2"};
Run Code Online (Sandbox Code Playgroud)

它不编译.

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