标题说全部。
示例代码:
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。我知道如何从父母那里检索价值,但是如何 从儿童那里检索价值吗?
答案 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设计,以便在类中正确封装所有这些。因此,您将避免编写难以理解且难以维护的代码。