How to break out and return an object from a recursion after meeting a certain condition is met

时间:2016-12-09 13:02:21

标签: java recursion

I have a recusrion function where i want to return the object as soon as certain condition is met . The function looks like this .

GroupNavigationItemSRO getCategorySpecificNavItem(List<GroupNavigationItemSRO> items,String url) {
        GroupNavigationItemSRO sro = new GroupNavigationItemSRO();
        if(items != null && !items.isEmpty()){
            for(GroupNavigationItemSRO item : items) {
                if(item.getUrl().equals(url)) {
                    LOG.info("Found Specific Url");
                    return item;            
                }
                else
                getCategorySpecificNavItem(item.getChildren(),url);
               }
            }
        return null;
    }

Now the function returns null and i get why its happening despite meeting the criteria .How to avoid that and end the recursion as soon as the url is found.

1 个答案:

答案 0 :(得分:1)

你想要做的就是在你找到它的时候停止寻找,但是直到你这样做为止。

现有代码的主要问题是忽略递归调用的返回值。相反,您希望查看该返回值,如果不是null,则返回它;你做完了:

for(GroupNavigationItemSRO item : items) {
    if(item.getUrl().equals(url)) {
        LOG.info("Found Specific Url");
        return item;            
    }
    else {
        GroupNavigationItemSRO itemFromChild = getCategorySpecificNavItem(item.getChildren(),url);
        if (itemFromChild != null) {
            // Found!
            return itemFromChild;
        }
    }
}