有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java访问对象[]中哈希映射的键/值对

我有一个Object[],它包含许多HashMap类型的对象。HashMap如下所示:

Object[]
{id=15, name=Hello}
{id=27, name=Hello}
{id=15, name=Hello}

我尝试将其转换为HashMap[],但没有成功

我想迭代并检索一个名称列表。希望你能帮助我


共 (3) 个答案

  1. # 1 楼答案

    即使一个对象数组只包含HashMap实例,它仍然是一个对象数组,不能转换为HashMap数组

    但是,您可以迭代数组,并将每个元素转换为HashMap(或Map)。如果不确定数组中的每个对象都是贴图实例,请使用instanceof操作符:

    List<String> names = new ArrayList<String>(objects.size());
    for (Object o : objects) {
        if (o instanceof Map) {
            Map map = (Map) o;
            String name = map.get("name");
            if (name != null) {
                names.add(name);
            }
        }
    }
    
  2. # 2 楼答案

    不能将包含T1的数组强制转换为包含T2的数组。实际对象中具有自身类型的数组。这就是你没能施展的原因

    然而,我怀疑你是否真的有一个HashMap数组。您提供的转储看起来不像hashmap转储

    然而,要回答你最初的问题,你应该这样做:

        // assuming hashes is your array
        Object []hashes;
    
        for (Object object : hashes) {
            HashMap hash = (HashMap)object;
    
            for (Object o : hash.values()) {
                System.out.println(o);
            }
        }
    

    这将打印数组中所有哈希上的所有值

  3. # 3 楼答案

    我不确定我是否理解你的问题,因为它在语法上是错误的。但是

    你可以使用ArrayUtils.toMap()

      Map map = ArrayUtils.toMap(  new String[][]{
         {"@GRP@", artifactInfo.getGroup() },
         {"@ART@", artifactInfo.getName() },
         {"@VER@", artifactInfo.getVersion() },
         {"@PACK@", artifactInfo.getPackaging() },
         {"@NAME@", artifactInfo.getFileName() },
         {"@DESC@", req.getQueryString() },
      } );