如何从存储在ArrayList中的多级HashMap获取值?

时间:2012-04-03 12:39:44

标签: java android arraylist hashmap multi-level

标题说全部。

示例代码:

ArrayList<HashMap<String, Object>> data = new ArrayList<HashMap<String, Object>>();

HashMap<String, Object> parentHash = new HashMap<String, Object>();
HashMap<String, String> childHash = new HashMap<String, String>();

childHash.put("child_id", "id")
childHash.put("name", "first last");
childHash.put("sex", "man");

parentHash.put("parent_id", "id");
parentHash.put("name", "first last");
parentHash.put("sex", "woman");

parentHash.put("children", childHash);
data.add(parentHash);

如果我打印ArrayList&#34;数据&#34;那么一切看起来都没问题。在屏幕上(例子):

[{parent_id=id, name=first last, sex=woman, children=[{
        child_id=id, name=first last, sex=man
    }]
}, {parent_id=id, name=first last, sex=woman, children=[{
        child_id=id, name=first last, sex=man
    }]
}];

所以它是HashMap中的HashMap,然后是ArrayList。我知道如何从父母那里检索价值,但是如何     从儿童那里检索价值吗?

3 个答案:

答案 0 :(得分:4)

Map<String, String> childData= (Map<String, String>) parent.get("children");
String childId= childData.get("child_id");

另请注意,使用当前结构,您只能向父级添加一个子级:

parentHash.put("children", childHash);
parentHash.put("children", anotherChildHash); //overrides childHash
Map<String, String> childData = (Map<String, String>) parent.get("children");

在上面代码的末尾,childData包含anotherChildHash,而childHash不再存储在parentHash中。

答案 1 :(得分:3)

上面的答案确实想要你想要的(虽然你需要检查childHash是否为null)。但是,您考虑过定义自己的类吗? E.g。

public class Person {
    private int person_id;
    private String name;
    private String sex;

    // Handle zero to many children
    private ArrayList<Person> children = new ArrayList<Person>();

    // getters and setters follow.
}

然后呢;

if ( parent.hasChildren() ) {
    String name = parent.getChildren().get(0).getName();
}

答案 2 :(得分:1)

来自assylias的回答是正确的。我想补充一点,你可以稍微推动你的OO设计,以便在类中正确封装所有这些。因此,您将避免编写难以理解且难以维护的代码。