访问Object []中的HashMaps键/值对

时间:2011-02-02 13:42:24

标签: java

我有一个Object [],它包含许多HashMap类型的对象。 HashMap看起来像这样:

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

我曾尝试将其转换为HashMap [],但没有运气。

我想迭代并检索一个名单。希望你能帮帮我。

3 个答案:

答案 0 :(得分:3)

你不能将持有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);
        }
    }

这将打印阵列中所有哈希值的所有值。

答案 1 :(得分:3)

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

然而,您可以迭代数组,并将每个元素转换为HashMap(或Map)。如果您不确定数组中的每个对象都是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 :(得分:1)

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

您可以使用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() },
  } );