列表中包含列表的递归函数

3

我有一个对象(类型为“Flows”),其中包含类型为“Flows”的列表。

class Flows{
 String id;
 String sequence;
 List<Flows> listOfFlows;
}

我想将所有嵌套列表的元素(可以有任意数量的嵌套列表)合并到一个列表中。我们如何通过Java中的递归实现呢?

你需要在低级流程中定义listOfFlows的样子。如果它没有被使用,我希望它是null,但这对于任何递归解决方案来说都是至关重要的,以避免抛出NPE异常。 - WJS
1个回答

7

那么,类似这样的例子怎么办:

void flattenFlows(Flows flows, List<Flows> flowsList)
{
    flowsList.add(flows);
    for (Flows f: flows.listOfFlows) {
        flattenFlows(f, flowsList);
    }
}
flowsList 是您想要将所有流添加到其中的列表。
编辑:如果列表字段可能为 null(如一位评论者所指出的),请添加一个 null 检查:
void flattenFlows(Flows flows, List<Flows> flowsList)
{
    flowsList.add(flows);
    if(flow.listOfFlows!=null) {
        for (Flows f: flows.listOfFlows) {
            flattenFlows(f, flowsList);
        }
    }
}

1
你需要将 flowsList.add(f); 替换为 flowsList.add(flows); - N. berouain
@N.berouain 是的,谢谢。这是因为我在编辑中将它移出了内部循环。糟糕。 - Stan Ostrovskii
由于这会导致一系列低级流程,最终你会得到一个没有列表,只有一个空占位符的流程。在尝试迭代之前,你应该检查null ListOfFlows。当我尝试使用你的方法时,它抛出了NPE异常。如果列表被分配但为空,则没有问题。 - WJS
@WJS 添加了编辑以考虑空列表的可能性。 - Stan Ostrovskii

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接