簡體   English   中英

Java算法轉到包含列表列表的列表

[英]Java algorithm go to list that contains lists of lists

我想從列表中獲取所有元素,但此元素也有列表,直到列表為 null (node.getChildNotes() == null)

我嘗試了以下方法,但它不是一種可以無限深入的算法。

private List<Layout> createChildList(Node node) {
        List<Layout> layouts = new ArrayList<>();
        int count = 0;
        while (true) {
            Node child = node.getChildNodes().item(count);
            if(child == null){
                break;
            }
            NodeList children = child.getChildNodes();
            for (int i = 0; i < children.getLength(); i++) {
                child = children.item(i);
                Layout layout = new Layout();
                layout.setName(child.getNodeName());
                layouts.add(layout);
            }
        count++
        }
        return layouts;
    }

private List<LayoutEntity> createChildList(Node node) {
        List<LayoutEntity> layouts = new ArrayList<>();
        NodeList nodeList = node.getChildNodes();
        for (int i = 0; i < nodeList.getLength(); i++) {
            Node childNode = nodeList.item(i);
            LayoutEntity layout = new LayoutEntity();
            layout.setId(getIdByNode(childNode));
            layout.setName(childNode.getNodeName());
            layouts.add(layout);
            if (childNode.hasChildNodes()) {
                createChildList(childNode);
            }
        }
        return layouts;
    }

我認為使用深度遞歸函數,您可以首先獲取父節點的所有子節點,然后簡單地為每個節點創建一個new Layout

private List<Node> createChildList(Node parent) {
        List<Node> result = new ArrayList<Node>();
        NodeList children = parent.getChildNodes();
        for (int i = 0; i < children.getLength(); i++) {
            result.addAll(createChildList(children.item(i)));
        }
        return result;
    }

在 if 條件之后,您將獲得子節點並有一個 for 循環,您可以在其中檢查所有這些子節點。 我不知道你為什么需要 while(true) 循環。 就這樣放着吧。另外,count變量也沒用。

private List<Layout> createChildList(Node node) {
        List<Layout> layouts = new ArrayList<>();
        //int count = 0; WHY TO USE THIS USE THIS?
        Node child = node.getChildNodes().item(0);
        if(child == null){
            break;
        } else{
            NodeList children = child.getChildNodes();
            for (int i = 0; i < children.getLength(); i++) {
                child = children.item(i);
                Layout layout = new Layout();
                layout.setName(child.getNodeName());
                layouts.add(layout);
        }

        return layouts;
    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM