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;
}
添加回答
举报