2 回答

TA貢獻1886條經驗 獲得超2個贊
NullPointerException因為您在 for 循環開始后對列表進行空檢查children。應該在進入循環之前完成。另外,我注意到您沒有匯總結果,每次調用getJobChildren()您都會實例化一個新列表,并且您沒有在方法返回時將其添加到父調用中。
用于遍歷子列表(假設沒有循環)的深度優先遞歸算法可以如下:
public List<Job> getJobChildren(final Job job, final List<Job> result) {
if (job == null) {
return result;
}
result.add(job);
if(job.getChildren() != null){
for(Job current : job.getChildren()){
getJobChildren(current, result);
}
}
return result;
}
您需要使用新的 ArrayList 觸發第一次調用以收集結果。
List<Job> results = new ArrayList<>();
getJobChildren(parentJob, results);
// Use the results here.

TA貢獻1883條經驗 獲得超3個贊
您需要檢查空值:
if (job.getChildren() != null) {
for (Job k : children) {
job.getChildren() 可以為空。無需迭代空列表。
修正方法:
public static List<Job> getJobChildren(Job job) {
List<Job> result = new ArrayList<Job>();
if (job == null) {
return new ArrayList<Job>();
}
List<Job> children = job.getChildren();
if (job.getChildren() != null) {
for (Job k : children) {
if (children != null && !children.isEmpty()) {
result.addAll(children);
getJobChildren(k);
} else {
result.add(k);
}
}
}
return result;
}
添加回答
舉報