2017-10-28 30 views
1

我有以下Tree類,它具有以下屬性及其獲取者和設置者。如何刪除樹中的無效子節點

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. 
      } 
     } 
    } 
} 
+1

你能告訴我們你的代碼嗎? –

+0

你面臨的問題是什麼?請將您當前擁有的完整源代碼添加到您的問題中,其中包括不起作用的代碼。 – Progman

+0

添加了我的validateTree方法。我沒有得到如何從樹中刪除元素,如果它不符合標準。 – RBP

回答

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

從集合中移除元素的安全方法是使用迭代器。在你的情況下,它可能看起來像這樣:

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(); 
    } 
}