1

标题说明了一切。

示例代码:

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 “数据”,一切看起来都不错(示例):

[{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中的。我知道如何从父级检索值,但如何从子级检索值?

4

3 回答 3

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 中。

于 2012-04-03T12:44:46.393 回答
3

上面的答案确实需要您想要的(尽管您需要检查 childHash 是否为空)。但是,您是否考虑过定义自己的类?例如

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();
}
于 2012-04-03T12:51:34.923 回答
1

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

于 2012-04-03T12:52:18.083 回答