Java 一步声明并将字符串数组放入HashMap中

Java 一步声明并将字符串数组放入HashMap中,java,hashmap,arrays,Java,Hashmap,Arrays,我正在尝试将静态数据插入Java中的HashMap,如下所示: HashMap<String,String[]> instruments = new HashMap<String, String[]>(); instruments.put("EURUSD", {"4001","EURUSD","10000","0.00001","0.1","USD"}); 但它不是很有表现力,而且很难维护 因此,我的问题是,有没有一种方法可以在一个步骤/行中执行put()操作和字符串数

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

HashMap<String,String[]> instruments = new HashMap<String, String[]>();
instruments.put("EURUSD", {"4001","EURUSD","10000","0.00001","0.1","USD"});
但它不是很有表现力,而且很难维护

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

这样做:

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

要在一句话中表达所有内容,请使用双大括号:

 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"});
     }
 };
HashMap instruments=newhashmap(){
{
看跌期权(“欧元兑美元”,新字符串[]{“4001”、“欧元兑美元”、“10000”、“0.00001”、“0.1”、“美元”});
看跌期权(“欧元”,新字符串[]{“4001”、“欧元兑美元”、“10000”、“0.00001”、“0.1”、“美元”});
}
};

我想你已经找到了有效的方法。但原因是

instruments.put("EURUSD", {"4001","EURUSD","10000","0.00001","0.1","USD"});
不起作用是因为
{“4001”、“欧元兑美元”、“10000”、“0.00001”、“0.1”、“美元”}
{}
是Java数组中用于初始化的语法糖或捷径。它附带了一个约束,即它必须始终与数组声明语句一起使用,否则就是语法错误

数组声明语句

String[] array = {"1", "2"};
这样Java就知道它需要为您创建的数组实际上是
String
类型的元素

如果您违反上述声明如下:

String[] array;
array = {"1", "2"};
它不能编译


使用
新字符串[]{“4001”、“EURUSD”、“10000”、“0.00001”、“0.1”、“USD”}
,编译器知道它必须实例化一个元素类型为
字符串的新数组(
新字符串[]
),并使用您提供的值初始化新实例化的数组(
{“4001”、“EURUSD”、“10000”、“0.00001”、“0.1”、“USD”}
)。是的,那是真的。。但既然OP想要一步到位。。所以我给了他……:)我认为实际的问题是为什么
put
方法调用不起作用。但我想你还是用新的东西介绍了OP+1:)@RohitJain谢谢这很有用。我以前在侦听器中看到过这种构造,但没有意识到子类化也可以在HashMap中使用。将更频繁地使用此结构。@Baz谢谢,这正是我搜索的内容。你能在那里添加到该数组吗?@S.Matthew_English只需在末尾添加一个新字符串。也许我不明白你在问什么?但是一旦你把它放在那里,如何添加到数组中?你可以用哈希映射得到数组。但是如果你的意思是这样的话,你就不能增加。我做了底部阿米特推荐的事情。你认为这是一个好的解决方案吗?你知道怎么打印这样的东西吗?
String[] array;
array = {"1", "2"};