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");

また、現在の構造では、親に子を 1 つしか追加できないことに注意してください。

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

上記のコードの最後に、childDataanotherChildHash が含まれており、childHash はもはやparentHash に格納されていません。

于 2012-04-03T12:44:46.393 に答える
3

上記の答えはあなたが望むでしょう(ただし、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.
}

じゃあ後で;

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 に答える