2016-06-28 154 views
0

我正在尋找一種合適的遞歸方式來實現以下功能: 元素A可以具有列表L1,其中包含其他元素,例如A等。 B,C和D.這些元素(B,C和D)也可以具有列表L2,L3,L4。 所以我也需要通過這些列表。 背景是我想從名稱末尾包含「LB」的所有元素的所有列表中獲取所有對象(由getName()檢索)。列表中的所有對象都具有相同的類型。 我如何做到這一點?因爲我不知道會有多少元素和列表,我認爲遞歸解決方案是唯一適合的元素和列表?通過列表元素遞歸,列表元素也可以有列表

+0

你的列表將被存儲爲類的屬性或者他們會在根目錄? –

回答

1

基本上你有一個樹形結構,這意味着你可能需要某種形式的樹遍歷。假設我們有這樣的樹狀結構:

class Node<T>{ 
    T value; 
    List<Node<T>> children = new ArrayList<>(); 
} 

現在,如果你想要一個回調ç適用於每一個節點,你會做這樣的事情:

public <T> void visit(Node<T> rootNode, Consumer c){ 
    c.consume(rootNode.value); 
    rootNode.children.forEach(n -> visit(n, c)); 
} 

這就是所謂的深度優先遍歷。

+0

哇,這似乎很難實施。我將如何使用我的數據填充此樹,以及如何搜索此樹中的節點? – BlackACE

+0

@BlackACE:在Java中查找樹實現,應該有大量的在線。 – sotix

+0

@sotix +1。我建議Guava的['TreeTraverser'](http://google.github.io/guava/releases/snapshot/api/docs/com/google/common/collect/TreeTraverser.html)類 –