這是一個自關聯父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();
}