Java 将数组添加到Hashmap?
我有一个接受字符串和对象的Hashmap,我想将字符串[]和对象[]添加到Hashmap,但它似乎没有将它们作为对象添加 我已经离开Java世界11年了,所以很抱歉,如果这是把一个正方形的钉子砸成一个圆孔,我只是希望当以数组的形式传递一个对象时,它会工作 我要补充的是,相同的代码在C中的工作方式显然略有不同,将数组传递到字符串和对象的字典中,因此期望它在Java中类似 我已经尝试在put命令之外声明数组,这就是我测试的范围Java 将数组添加到Hashmap?,java,collections,hashmap,Java,Collections,Hashmap,我有一个接受字符串和对象的Hashmap,我想将字符串[]和对象[]添加到Hashmap,但它似乎没有将它们作为对象添加 我已经离开Java世界11年了,所以很抱歉,如果这是把一个正方形的钉子砸成一个圆孔,我只是希望当以数组的形式传递一个对象时,它会工作 我要补充的是,相同的代码在C中的工作方式显然略有不同,将数组传递到字符串和对象的字典中,因此期望它在Java中类似 我已经尝试在put命令之外声明数组,这就是我测试的范围 Map<String, Object> params = n
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} );
如上所示,这是我可以看到的输出。代码没有问题。但是,由于params映射将对象存储为值,因此每次从映射获取值时,可能需要将该值转换回其类型。每个键存储的值的类型不同
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);
}
您的阵列已成功添加到映射。我不知道你怎么会觉得它是空白的。当我在下面尝试时,我确实看到了打印的值:
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);
});
请出示参数声明。请描述您看到的实际错误。据我所知,这段代码应该可以工作。也许您可以发布一篇文章,其中包括创建hashmap、如何尝试从hashmap检索数组以及获得的确切结果。使用Map可能是错误的方法,为什么不创建自己的类,并将提到的Map键作为字段。然后,您将首先具有类型安全性,其次已经有了对象所包含内容的清晰文档。不需要map.ContainesKeyxxx了,你能澄清一下你所说的al和sf是什么意思吗?更具体地说,是空白的,部分,而不是当前的部分…?声明上有“`”,因此没有看到hashmap
params.forEach((k, v)->{
if(v.getClass().isArray()) {
v = Arrays.toString((Object[])v);
}
System.out.println("key: " + k + "\tvalue: " + v);
});