2012-10-04 36 views
4

我想静态数据插入HashMap中在Java中是这样的:声明并把字符串数组中的HashMap一步到位

HashMap<String,String[]> instruments = new HashMap<String, String[]>(); 
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()操作和字符串数组声明?

+2

应该是新的String [] {数组元素} –

回答

11

这将做到这一点:

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

太棒了,谢谢@Baz – jule64

+0

@Baz谢谢,正是我在寻找的。 – Nobody

+0

你可以在那里添加到那个数组吗? –

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"}); 
    } 
}; 
+0

否则称为[_instance初始值块_](http://docs.oracle.com/javase/tutorial/java/javaOO/initial.html)。 –

+0

它也是'HashMap'的子类。 –

+0

@BheshGurung。是的,这是真的..但由于OP想要在一步..所以我给了他.. :) :) –

6

我想你已经得到了什么工作。但原因是

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"})。

+0

但是如何将它添加到该阵列中? –

+0

你可以用散列图得到数组。但你不能添加到如果多数民众赞成在你的意思。 –

+0

我做的东西,阿米特在底部推荐[这里](http://stackoverflow.com/questions/13095076/hashmapstring-arraylist-appending-arraylist-with-new-values-based-on-the-key)做你认为这是一个很好的解决方案?你知道如何打印这样的东西吗? –