有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

包含列表列表的Java算法go to list

我想从一个列表中获取所有元素,但这个元素也有列表,直到列表为空(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;
    }

共 (2) 个答案

  1. # 1 楼答案

    我认为,使用深度递归函数,可以首先获取父节点的所有子节点,然后为每个节点创建一个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;
        }
    
  2. # 2 楼答案

    在if条件之后,获得子节点,并有一个for循环,在该循环中检查所有子节点。我不知道你为什么需要while(真)循环。就这样吧。此外,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;
        }