我需要在特定节点之后返回所有子项的列表。这是我所做的-

public List<Object> getChildrenTree(Object currentObject, List<Object> returnList){

        //get all child-URIs for the category
        List<Object> objectChildren = currentObject.getChildren();

        for (Obj childObj : objectChildren) {

            if(childObj !=null){

                if(childObj.getChildren().size() >0){
                    getChildrenTree(childObj,returnList);
                }else{
                    returnList.add(childObj);
                }
            }
        }

        return returnList;
    }


但它不起作用,并且不能正确添加所有子项。

最佳答案

您没有添加有孩子的孩子。

您需要将循环更改为:

    for (Obj childObj : objectChildren) {
        if(childObj !=null){
            returnList.add(childObj);
            if(childObj.getChildren().size() >0){
                getChildrenTree(childObj,returnList);
            }
        }
    }
    return returnList;


也就是说,无论它是否有子代,都应始终添加childObj

我还将childObj的添加项移到添加其子项之前,假设这是您希望节点出现的顺序(即先是父项,然后是子项)。

另外,如前所述,循环内不应有return语句,因为它将跳过除第一个孩子以外的所有对象。 return语句应在循环之后。

07-24 22:15