java tree 树的代码实现

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 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代码链接

你可能感兴趣的:(java笔记)