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

Java 如何从存储在ArrayList中的多级HashMap中获取值?,java,android,arraylist,hashmap,multi-level,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 Ha

标题说明一切

示例代码:

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);
所以它是HashMap中的HashMap,然后是ArrayList中的HashMap。我知道如何从父级检索值,但是如何 我是否从子级检索值?

Map childData=(Map)parent.get(“子级”);
Map<String, String> childData= (Map<String, String>) parent.get("children");
String childId= childData.get("child_id");
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");
parentHash.put(“children”,childHash); parentHash.put(“children”,另一个childhash)//覆盖子哈希 Map childData=(Map)parent.get(“children”); 在上面代码的末尾,
childData
包含另一个childHash,并且childHash不再存储在parentHash中。

Map childData=(Map)parent.get(“childs”);
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");
parentHash.put(“children”,childHash); parentHash.put(“children”,另一个childhash)//覆盖子哈希 Map childData=(Map)parent.get(“children”);
在上面代码的末尾,
childData
包含另一个childHash,并且childHash不再存储在parentHash中。

上面的答案将满足您的要求(尽管您需要检查childHash是否为null)。但是,您是否考虑过定义自己的类?例如

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.
}

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

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.
}

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

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

Thanx,我制作了一个示例代码,以便许多人都能理解。Thanx,我制作了一个示例代码,让很多人都能理解。我(很快)会给你上一堂课。也谢谢你,我真的很感激!也谢谢你,我真的很感激!在parentHash中,您存储字符串和HashMaps-如果您检索字符串并将其转换为HashMap,您将得到此类错误(例如通过执行
(Map)parent.get(“name”);
),您有何建议?因为有更多的父对象,所以我使用以下代码:HashMap fetchChildContent=(HashMap)parentHash.get(counter.get(“子对象”);任何帮助都将不胜感激,因为我是Java新手。如果您将问题中发布的代码与我发布的代码一起使用,它将起作用。因此,您很可能添加了其他无法达到预期效果的内容。我建议您更新您的问题或使用新代码创建一个新问题。我将发表一篇新帖子,感谢您的支持。在parentHash中,您存储字符串和HashMaps-如果您检索字符串并将其强制转换为HashMap,您将收到此类错误(例如,通过执行
(Map)parent.get(“name”);
),您有何建议?因为有更多的父对象,所以我使用以下代码:HashMap fetchChildContent=(HashMap)parentHash.get(counter.get(“子对象”);任何帮助都将不胜感激,因为我是Java新手。如果您将问题中发布的代码与我发布的代码一起使用,它将起作用。因此,您很可能添加了其他无法达到预期效果的内容。我建议你更新你的问题或者用新的代码创建一个新的问题。我会写一篇新的帖子,谢谢你的支持。