java tree 树的代码实现 菜单功能等
在开发后台管理系统过程中,菜单功能是必定实现的一个功能,因此针对此功能做个笔记:
- 树统一接口定义
- 默认树类的创建
- 实现树状列表工具类
统一接口定义
public interface Tree {
String getLabel(); //名称
Integer getPid(); //父级id
Integer getId(); //自身id
String getPath(); //路径
}
- 定义统一tree的接口 为后面做扩展
默认树的实现类
public class DefaultTree<T extends DefaultTree> extends BaseDO implements Tree {
private Integer pid;
private String label;
private String path;
@Transient
private List<T> children =new ArrayList<>();
- 实现tree接口
tree的工具实现
public class TreeUtil {
public static <T extends DefaultTree> List<T> build(List<T> trees , Integer pid) {
Map<Integer, List<T>> map = new HashMap<>();
for (T t : trees) {
Integer parentId = t.getPid();
List<T> childrens = map.get(parentId);
if (childrens == null) {
childrens = new ArrayList<>();
map.put(parentId, childrens);
}
childrens.add(t);
}
List<T> treeList = new ArrayList<>();
childBuild(map,pid,treeList);
return treeList ;
}
private static <T extends DefaultTree> void childBuild(Map<Integer, List<T>> map, Integer pid , List<T> treeList){
List<T> tList = map.get(pid);
if(!CollectionUtils.isEmpty(tList)){
for(T tree : tList){
treeList.add(tree);
childBuild(map ,tree.getId(), tree.getChildren());
}
}
}
}
- 此工具类是实现列表到树状列表的转换
在common包的base和utils包中
github代码链接