Java 列表的递归函数
我有一个对象(类型为“Flows”),它包含一个类型为“Flows”的列表Java 列表的递归函数,java,recursion,nested-lists,Java,Recursion,Nested Lists,我有一个对象(类型为“Flows”),它包含一个类型为“Flows”的列表 class Flows{ String id; String sequence; List<Flows> listOfFlows; } 类流{ 字符串id; 字符串序列; 流动列表; } 我想将所有嵌套列表(可以有任意数量的嵌套列表)的所有元素都放在一个列表中。我们如何在java中通过递归实现它 比如: void flattenFlows(Flows flows, List<Flows>
class Flows{
String id;
String sequence;
List<Flows> listOfFlows;
}
类流{
字符串id;
字符串序列;
流动列表;
}
我想将所有嵌套列表(可以有任意数量的嵌套列表)的所有元素都放在一个列表中。我们如何在java中通过递归实现它 比如:
void flattenFlows(Flows flows, List<Flows> flowsList)
{
flowsList.add(flows);
for (Flows f: flows.listOfFlows) {
flattenFlows(f, flowsList);
}
}
您需要替换
flowsList.add(f)代码>带有flowsList.add(流)代码>@N.berouain是的,谢谢。这是因为我在编辑时将其移出了内部循环。如果这会产生一个低级别流的列表,那么最终将得到一个没有列表的流,只有一个空的占位符。在尝试迭代之前,您可能应该检查null
ListOfFlows
。我尝试时,你的方法引发了NPE。如果列表已分配但为空,则没有问题。@WJS添加了“编辑”以解释空列表的可能性您需要定义低级别流中的listOfFlows
的外观。如果不使用它,我希望它是null
,但这是任何递归解决方案的基础,以避免抛出NPE。
void flattenFlows(Flows flows, List<Flows> flowsList)
{
flowsList.add(flows);
if(flow.listOfFlows!=null) {
for (Flows f: flows.listOfFlows) {
flattenFlows(f, flowsList);
}
}
}