2017-08-23 70 views
1

我正在使用Java嘗試遞歸迭代對象。爲了簡化我的例子,假設這個類被稱爲Simple,它包含一個ID和一個可以包含0到n個其他Simple對象的列表,而這些Simple對象有一個可以包含0到n個其他Simple對象的列表,等使用Java中的對象列表迭代對象的最佳方法

我想要做的是傳遞一個簡單和一個ID,並讓我的方法返回匹配該ID的簡單。下面是我寫的方法:

public static Simple getSimpleById(Simple simple, int id) { 
    if (simple.getId() == id) { 
     return simple; 
    } else { 
     for (Simple s : simple.getSimpleList()) { 
      return getSimpleById(s, id); 
     } 
    } 
    return null; // no match found 
} 

的問題是使用遞歸的方法調用 - 用一個return語句,我的方法儘快退出,因爲它擊中一個簡單的有一個空列表。如果沒有返回語句,當找到匹配項時,Simple將返回給調用者,並且該方法只是繼續迭代。

我可以完成我需要做的遞歸還是我吠叫錯誤的樹?我認爲這是導致這個問題的列表,有沒有更好的方法來做到這一點?

回答

3

將其更改爲

for (Simple s: simple.getSimpleList()) { 
    Simple simple = getSimpleById(s, id); 
    if (simple != null) return simple; 
} 
+1

哇,這麼簡單(沒有雙關語意),我不知道爲什麼我沒有想到要試試這個。感謝您的快速響應,這似乎是完美的。 – SourMonk