Java 列表的递归函数

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>

我有一个对象(类型为“Flows”),它包含一个类型为“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);
        }
    }
}