Java 将数组添加到Hashmap?

Java 将数组添加到Hashmap?,java,collections,hashmap,Java,Collections,Hashmap,我有一个接受字符串和对象的Hashmap,我想将字符串[]和对象[]添加到Hashmap,但它似乎没有将它们作为对象添加 我已经离开Java世界11年了,所以很抱歉,如果这是把一个正方形的钉子砸成一个圆孔,我只是希望当以数组的形式传递一个对象时,它会工作 我要补充的是,相同的代码在C中的工作方式显然略有不同,将数组传递到字符串和对象的字典中,因此期望它在Java中类似 我已经尝试在put命令之外声明数组,这就是我测试的范围 Map<String, Object> params = n

我有一个接受字符串和对象的Hashmap,我想将字符串[]和对象[]添加到Hashmap,但它似乎没有将它们作为对象添加

我已经离开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} );

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

代码没有问题。但是,由于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);
    });