2017-08-23 35 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