我有一个可以接受字符串和对象的哈希映射,我想在哈希映射中添加一个String []和Object [],并且似乎没有将它们添加为对象。
我离开Java世界已有11年了,所以很抱歉如果这将一个方钉砸到一个圆孔中,我只是希望以数组的形式传递对象时,它会起作用。
我将添加相同的代码(显然略有不同)在C#中工作,将数组传递到字符串和对象字典中,因此期望它在Java中是相似的。
我试图在put命令之外声明数组,这是我测试过的结果。
Map<String, Object> params = new HashMap<>();
params.put("sl", new String[]{"AZN"});
params.put("dType", "trade");
// year - the year minus 1900
// month - 0 to 11
params.put("startDate", new Date(2018-1900, 11, 20));
params.put("endDate", new Date(2018-1900, 11, 20));
params.put("tZ", "Eur");
params.put("ac", "equity");
params.put("af", new Object[]{"=", "price", 6031} );
我希望参数具有一个名为sl的字符串数组和一个具有3个实体的对象数组af ... sl和af当前为空
当我说空白时,我看到:
params[0] sl >
params[1] dType > trade
params[2] startDate > 2018-11-20
params[3] endDate > 2018-11-20
params[4] tZ > Eur
params[5] ac > equity
params[6] af >
如上所述,这是我可以看到的输出。
答案 0 :(得分:0)
代码没有问题。但是,由于参数映射将Object作为值存储,因此每次从映射中获取值时,可能需要将值强制转换回其类型(每个键都存储一个类型不同的值。)。
Map<String, Object> params = new HashMap<>();
params.put("sl", new String[]{"AZN"});
params.put("dType", "trade");
// year - the year minus 1900
// month - 0 to 11
params.put("startDate", new Date(2018-1900, 11, 20));
params.put("endDate", new Date(2018-1900, 11, 20));
params.put("tZ", "Eur");
params.put("ac", "equity");
params.put("af", new Object[]{"=", "price", 6031} );
for(Object obj:(Object[]) params.get("af")) {
System.out.println(obj);
}
for(String obj:(String[]) params.get("sl")) {
System.out.println(obj);
}
答案 1 :(得分:0)
您的数组已成功添加到地图。我不确定您是如何找到空白的。当我尝试以下操作时,我确实看到该值已被打印出来:
params.forEach((k, v)->{
System.out.println("key: " + k + "\tvalue: " + v);
});
输出:
key: ac value: equity
key: endDate value: Thu Dec 20 00:00:00 IST 2018
key: af value: [Ljava.lang.Object;@119d7047 // Class name + hashcode of the object being printed
key: tZ value: Eur
key: dType value: trade
key: sl value: [Ljava.lang.String;@776ec8df // Class name + hashcode of the object being printed
key: startDate value: Thu Dec 20 00:00:00 IST 2018
如果要打印数组值,请尝试以下操作:
params.forEach((k, v)->{
if(v.getClass().isArray()) {
v = Arrays.toString((Object[])v);
}
System.out.println("key: " + k + "\tvalue: " + v);
});