element-ui树形控件后台返回的数据+生成组织树的工具类

  

,,,,开发项目的时候遇到需要在表单中选择参会人员,根据不同部门下选择不同的人,在element-ui中有树形控件能满足这种情况,后台封装数据记录一下。

  

,,封装格式:

  

 element-ui树形控件后台返回的数据+生成组织树的工具类

  

,,返回数据格式:

  

 element-ui树形控件后台返回的数据+生成组织树的工具类

  

,,接收数据的pojo类:

  

 element-ui树形控件后台返回的数据+生成组织树的工具类

  

  

,,本以为以上的数据结构能满足项目的使用,但是我错了,当时的数据库中只有不到10条的数据并且组织结构非常单一,随后同事导入了数据(6000多条),组织结构也不是如此单一的了,我在项目中固定了三层结构肯定是错的,要一个活的组织树。

  

,,网上有很多大牛写的方法,递归的,迭代的,我在看了很多大牛写的方法以后,有了实现思想。

  

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

  

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

  

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

  

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

  

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

  

,,数据的接口类:

  

,,可根据自己本身情况更改接口所要实现的发,放我这接口类只是实现了某些属性的,集方法,写这个接口类主要是为了下面的工具类,定义泛型T的类型(我是这么理解的,理解的不是很好,网上有很多资料,可自行查看)

     /* *   *树形数据实体接口   * @author YangWenHui   * @date 2018年4月11日   * @param & lt; T>   */公共接口dataTree{      ,,,公共字符串getId ();      公共字符串getParentId ();      公共空间setChildList (ListchildList);      公共ListgetChildList ();   }      

工具类:

  

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

     /* *   *获取树型工具类   * @author YangWenHui   *   */公开课TreeUtil {//获取顶层节点   公共静态& lt; T扩展dataTreegetTreeList(字符串topId ListentityList) {   List,resultList=new ArrayList<的在();//存储顶层的数据      T> Map<对象;,treeMap=new HashMap<的在();   T itemTree;      for (int i=0; i< entityList.size (),, ! entityList.isEmpty();我+ +){   itemTree=entityList.get(我);   treeMap.put (itemTree.getId (), itemTree);//把所有的数据放当到地图中,id为键   如果(topId.equals (itemTree.getParentId ()) | | itemTree.getParentId ()==null){//把顶层数据放到集合中   resultList.add (itemTree);   }   }//循环数据,把数据放到上一级的小朋友都属性中   for (int i=0;i ());   }   data.getChildList阀门()(itemTree);//把子节点放到父节点childList当中   treeMap.put (itemTree.getParentId()、数据);//把放好的数据放回当地图中   }   }   返回resultList;   }   }      

实体类:

  

,,接收数据的实体类,其实不用写,设置方法了,因为@ data这个注解已经帮我们写好了,设置方法了,这个注解可以帮我们节省时间。

     /* *   *生成树数据的接收类   * @author YangWenHui   *   */@ data   公共类OtlDeptMenu实现dataTreeelement-ui树形控件后台返回的数据+生成组织树的工具类