element-ui树形控件

首先我们要清楚后台返回树形的格式为如下:

element-ui树形控件

所以按照以下思想实现树形结构:

1.把所有数据查询出来放到一个map集合当中,key值为本身数据的id,value值为数据本身。优点是:只对数据库进行一次查询,避免浪费资源

2.把查询出来的数据判断其有没有父id,把没有父id的存放一个list集合当中。(顶层数据)

3.把数据进行for循环,根据本身数据的父id获取map集合当中的数据。例:map.get(entityList.getParentId()),在此之前已经把查询出来的数据一 一放到了map集合当中,其实这一步就是相当于判断本身在所有的数据中有没有父亲。

4.如果有父亲的话进行判断父亲有没有孩子,有就直接加,没有就先给父亲分配一个空间(房子),有了房子你才能住进去。

顺着这个思想,以下是代码实现。

数据的接口类:

    可根据自己本身情况更改接口所要实现的发放,我这接口类只是实现了某些属性的get、set方法,写这个接口类主要是为了下面的工具类,定义泛型T的类型

public interface dataTree<T> {

    public String getId();

    public String getParentId();

    public void setChildList(List<T> childList);

    public List<T> getChildList();

}

工具类:

    以下的泛型T就是你接收数据的实体类,要继承上面数据接口类

public class TreeUtil {

    public static <T extends dataTree<T>> List<T> getTreeList(String topId,
List<T> entityList){
List<T> resultList = new ArrayList<>();//存储顶层的数据

Map<Object, T> treeMap = new HashMap<>();

T itemTree;
for(int i=0;i<entityList.size()&&!entityList.isEmpty();i++) {

     itemTree = entityList.get(i);
  treeMap.put(itemTree.getId(),itemTree); //把所有的数据放到map当中,idkey
  //把顶层数据放到集合中
if(topId.equals(itemTree.getParentId()) || itemTree.getParentId() == null) {

    resultList.add(itemTree);

 }
}
//循环数据,把数据放到上一级的childen属性中
for(int i = 0; i< entityList.size()&&!entityList.isEmpty();i++) {
itemTree = entityList.get(i); //map集合中寻找父亲
T data = treeMap.get(itemTree.getParentId());

if(data != null) {//判断父亲有没有
if(data.getChildList() == null) {

    data.setChildList(new ArrayList<>());

  }
data.getChildList().add(itemTree);//把子节点 放到父节点childList当中

treeMap.put(itemTree.getParentId(), data);//把放好的数据放回map当中
}

    }

    return resultList;

}
}

实体类:

    接收数据的实体类,其实不用写get、set方法了,因为lombok注解工具类为我们提供@Data这个注解已经帮我们写好了get、set方法了

@Data

public class TreaMenu implements dataTree<TreaMenu> {

    private String id;

    private String parentId;

    private String name;

    private List<TreaMenu> childList;

}

控制层使用

public List<TreaMenu> getparticipants(){

    List<TreaMenu> data = metaService.getDeptName();
//接收在数据库中查询到的数据

    List<TreaMenu> list = new ArrayList<>();
//返回的最终集合,可根据自己返回类型更改。

    List<TreaMenu> tree = TreeUtil.getTreeList("0", data);
//调用工具类,第一个参数是默认传入的*id,和查询出来的数据

    TreaMenu result = new TreaMenu();
//我在已经生成好的树形结构外面有包了一层。视情况而定,可以不用写

    result.setId("0");

    result.setName("树形结构");

    result.setChildList(tree);

    list.add(result);//把对象放到list中,前台element-ui中的树形控件需要的是数组的集合

    return list;

}