JAVA生成树形结构代码
数据库列
id
parentId
name
替换代码中的实体类
最后调用buildMenuTree(List cates)方法即可生成树形结构!
/**
* 判断是否有子节点
*/
private boolean hasChild(List<FolderDto> list, FolderDto p) {
return getChildList(list, p).size() > 0 ? true : false;
}
private void recursionFn(List<FolderDto> list, FolderDto p) {
// 得到子节点列表
List<FolderDto> childList = getChildList(list, p);
p.setChildren(childList);
for (FolderDto tChild : childList) {
if (hasChild(list, tChild)) {
recursionFn(list, tChild);
}
}
}
public List<FolderDto> buildMenuTree(List<FolderDto> cates) {
List<FolderDto> returnList = new ArrayList<FolderDto>();
List<String> tempList = new ArrayList<String>();
for (FolderDto cate : cates) {
tempList.add(cate.getId());
}
for (Iterator<FolderDto> iterator = cates.iterator(); iterator.hasNext();) {
FolderDto cate = (FolderDto) iterator.next();
// 如果是顶级节点, 遍历该父节点的所有子节点
if (!tempList.contains(cate.getParenId())) {
recursionFn(cates, cate);
returnList.add(cate);
}
}
if (returnList.isEmpty()) {
returnList = cates;
}
return returnList;
}
private List<FolderDto> getChildList(List<FolderDto> list, FolderDto p) {
List<FolderDto> tlist = new ArrayList<FolderDto>();
Iterator<FolderDto> it = list.iterator();
while (it.hasNext()) {
FolderDto n = (FolderDto) it.next();
if (n.getParenId().equals( p.getId())) {
tlist.add(n);
}
}
return tlist;
}