我在Tree
级以下,具有以下属性及其getter和setter。
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.
}
}
}
}
答案 0 :(得分:2)
最简单的方法是在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
,它只包含有效的节点。
答案 1 :(得分:1)
从集合中删除元素的安全方法是使用迭代器。在你的情况下,它可能看起来像这样:
List<Tree> children = tree.getChild();
for (Iterator<Tree> iterator = children.iterator(); iterator.hasNext();) {
Tree node = iterator.next();
if (list.contains(node.getName())){ // String elements in list
validateTree(tree); //OK
} else {
iterator.remove();
}
}