我在Tree类下面,具有以下属性以及它们的getter和setters。

public class Tree {
   private String name, address;
   private List<Tree> child;
}


我正在迭代Tree并将名称与有效名称列表进行比较。如果名称无效,则必须从主Tree中删除​​该特定的Tree节点。但是,我不知道如何实现删除功能。

private void validateTree(Tree tree) {
    if (tree.getChild() != null && !tree.getChild().isEmpty()) {
        for(Tree node:tree.getChild()){
            if(list.contains(node.getName())){  // String elements in list
                validateTree(tree); // validate the subtree
            } else {
                // Here I have to remove the child node from the Tree.
            }
        }
    }
}

最佳答案

最简单的方法是在removeChild()中添加Tree方法:

public class Tree {

    List<Tree> child;

    public void removeChild(Tree tree) {
        child.remove(tree);
    }
}


在您的验证方法中,您可以使用它:

 if (validNodes.contains(node.getName())) {
    validateTree(tree);
 } else {
    tree.removeChild(node);
 }


但是,当您更改要循环的集合时,您应该总是非常怀疑。我强烈建议保留原始的Tree,并创建仅包含有效节点的第二个有效的Tree

09-30 17:15
查看更多