我想实现一个递归函数,它遍历列表中对象的子列表,并将子列表中的所有元素添加到一个大列表中。
我的目标如下:
使用名为.getdependson()的函数列出任务,该函数返回它所依赖的列表。
从一个任务开始,它依赖于任务b,然后又依赖于任务c和d,我想递归地迭代每个任务,并将它们添加到一个大列表中,其中包括任务a的每个依赖任务。
public List<Task> addDependencies(List<Task> tasks) {
for (Task task: tasks) {
if (!task.getDependsOn().isEmpty()) {
tasks.addAll(addDependencies(task.getDependsOn()));
return tasks;
} else {
return tasks;
}
}
return tasks;
}
这是我尝试过的,但它不起作用,因为它抛出了invocationtargetexception。我正试图解决我的问题,试图在我的大脑中调试它,现在已经有2个小时了,但无法解决它。
2条答案
按热度按时间dfty9e191#
您的方法中存在一些问题:
你只要把钱还给我就行了
tasks
什么时候task.getDependsOn()
是空的,忽略剩余的task
独立,你应该打电话continue
相反你打电话的时候没有复印
addDependencies(task.getDependsOn())
,这会产生意外的副作用(改变task.getDependsOn()
).对于这个问题,我更喜欢使用stream with flatmap,因为它不会产生副作用,并且我们不需要创建列表的多个副本。
完整示例
主类
任务
4smxwvx52#
我认为您的异常正在发生,因为您试图在迭代列表时同时追加列表。如果我明白你想做什么,也许像这样的事情会奏效