-1

私がやろうとしているタスクの PHP サンプルがあります。Javaを使用して同じことを行うにはどうすればよいですか? 方向を教えてください

function buildTree($array, $parent_id) {

    $arr = array();

    foreach ($array as $e) {

        if ($e['parent_id'] == $parent_id) {

            $arr[$e['id']] = array("title" => $e['title'],
                "id" => $e[$id],
                "children" => array());
            $submassive = buildTree($array, $e['id']);

            foreach ($submassive as $x) {
                $arr[$e['id']]['children'][] = $x;
            }
        }
    }

    return array_values($arr);
}
4

1 に答える 1

1

Java には java.util.Map があり、独自の Node クラスを定義できます。

public class Node {
    public Integer id;
    public String title;
    public Integer parentId;
    public Node parent;
    public List<Node> children = new ArrayList<Node>();

    public Node(Integer id, String title, Integer parentId) {
        this.id = id;
        this.title = title;
        this.parentId = parentId;
    }

    public static Node buildTree(List<Something> things) {
        Map<Integer, Node> nodes = new HashMap<Integer, Node>();
        // step 1: create nodes and put them into a map.
        for (Something thing: things) {
            Node node = new Node(thing.id, thing.title, thing.parentId);
            nodes.put(node.id, node);
        }
        // Step 2: associate nodes with each other
        Node rootNode = new Node(null, "root", null)
        for (Node node: nodes.valueSet()) {
            if (node.parentId != null) {
                node.parent = nodes.get(node.parentId);
            } else {
                node.parent = rootNode;
            }
            node.parent.children.add(node);
        }
        return rootNode;
    }
}

ところで: あなたのコード例は、まったく必要のない再帰に依存しています。最初に map/dictionary/associative-array を作成し、次にこのマップを使用してツリーを構築する方がはるかに簡単です。

于 2013-01-28T03:25:31.147 に答える