将数组添加到Hashmap <string,object>?

时间:2019-01-17 09:46:59

标签: java collections hashmap

我有一个可以接受字符串和对象的哈希映射,我想在哈希映射中添加一个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 >

如上所述,这是我可以看到的输出。

2 个答案:

答案 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);
    });