Java递归不迭代所有顶级元素

Java递归不迭代所有顶级元素,java,recursion,Java,Recursion,我面临一个递归问题。我有一个对象,它有一个自己的列表,列表中的每个对象都有一个自己的列表。此对象表示一棵树 现在我想迭代所有可能的对象以找到一个特定的对象,但我失败了。目前我的方法没有返回到顶层,我不知道如何修复它 方法: private Object selectSpecificItem(TreeObject treeObject) { for (TreeObject to : treeObject.getChildren()) { Object data = to.g

我面临一个递归问题。我有一个对象,它有一个自己的列表,列表中的每个对象都有一个自己的列表。此对象表示一棵树

现在我想迭代所有可能的对象以找到一个特定的对象,但我失败了。目前我的方法没有返回到顶层,我不知道如何修复它

方法:

private Object selectSpecificItem(TreeObject treeObject) {
    for (TreeObject to : treeObject.getChildren()) {
        Object data = to.getData();
        if (data instanceof PaymentOffice) {
            PaymentOffice po = (PaymentOffice) data;
            if (po.getCode().equals(getModelObject().getLocation())) {
                return to;
            }
        } else if (to.getChildren().length > 0) {
            selectSpecificItem(to);
        }
    }
    return null;
}
假设以下列表结构:

Item1
    - Item1.1
    - Item1.2
    - Item1.3
    - Item1.4
Item2
Item3
现在它迭代所有1/1.x项,但不是2/3项。我现在需要找到的项目是
Item3


如何更改递归以迭代所有元素?

您忽略了递归调用返回的值。您应该检查递归调用是否返回非
null
值,如果返回,则返回它

private Object selectSpecificItem(TreeObject treeObject) {
    Object result = null;
    for (TreeObject to : treeObject.getChildren()) {
        Object data = to.getData();
        if (data instanceof PaymentOffice) {
            PaymentOffice po = (PaymentOffice) data;
            if (po.getCode().equals(getModelObject().getLocation())) {
                return to;
            }
        } else if (to.getChildren().length > 0) {
            result = selectSpecificItem(to);
            if (result != null) {
                return result;
            }
        }
    }
    return result;
}
有些人喜欢在方法的末尾有一个
return
语句。如果你是这样一个人,你可以写:

private Object selectSpecificItem(TreeObject treeObject) {
    Object result = null;
    for (TreeObject to : treeObject.getChildren()) {
        Object data = to.getData();
        if (data instanceof PaymentOffice) {
            PaymentOffice po = (PaymentOffice) data;
            if (po.getCode().equals(getModelObject().getLocation())) {
                result = to;
                break;
            }
        } else if (to.getChildren().length > 0) {
            result = selectSpecificItem(to);
            if (result != null) {
                break;
            }
        }
    }
    return result;
}

您可能需要更改
selectSpecificItem(至)
返回selectSpecificItem(至)在您的else中if@Lino我也试过了,但是没有任何改变。你有任何根树对象,它将保存Item1,Item2。Item3作为它的子项?@NisheshPratap是的,它作为第一个调用传入。您没有迭代其他两个项,因为在第一个项中,您已经返回了一些内容,您还可以
中断
for循环,而不是在else if中返回
结果
,哪一个才是最好的same@Lino是的,非常感谢。它现在确实返回了正确的元素