記錄一次遞歸查詢

這是一個自關聯父id的表結構

最近工作中遇到一個需求,查詢每一層的父路徑, 這個需求非常常見,但是一直沒有寫過,今天記錄一下

實現方式是:遞歸。把數據全部加載到內存中,放入map(不要放list遍歷),然後去map裏對比id 

Map<String, Group> mapId2Group = new HashMap<String, Group>(); 
for (Group group : allGroups) { 
    mapId2Group.put(group.getId(), group); 
}

private String getGroupPath(Map<String, Group> mapId2Group,String groupId){ //要查詢的id
    Group group =mapId2Group.get(groupId);
    if(group==null){
        return "";
    }
    return getAllPath(mapId2Group,group,0);
}
private String getAllPath(Map<String, Group> mapId2Group,Group children,int depth) {
    if(depth>maxDepth){
        return children.getName();
    }
    if (StringUtils.isNotEmpty(children.getParentId())) {
        Group parentGroup = mapId2Group.get(children.getParentId());//去map中通過當前的父id查找
        if(parentGroup==null){  //如果查到了則返回name
            return children.getName();
        }
        return getAllPath(mapId2Group,parentGroup,depth+1) + "/" + children.getName(); //遞歸
    }
    return children.getName();

}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章