java 用map解决自关联分层

表结构:

其中pid与id为自关联关系。

对应对象:

class Emp{

     private int  id;

     private String name ;

     private int pid;

     private List<Emp> child;

}

需求:如表所示,需要将数据全部读取出来,封装成emp输出。(只需要最外层的对象)。

思路:利用java引用地址相同,一处变处处变的原理。循环两次得出最后结果。第一次循环将数据放进map,便于取出。二次循环组合数据。

代码:

public List<Emp> getList(){

   //获取原始数据。

   List<Emp> datas = empMapper.select();

 //定于输出数据容器

   List<Emp> reslut = new ArrayList();

  //把数据封装进map

  Map<Integer,Emp> map = new HashMap();

  for (Emp e : datas){

  map.put(e.getId,e)

  }

 for (Emp e  : datas){

     Emp e_p = map.get(e.getPid());

     if(e_p != null){

         List<Emp> child = e_p.getChild();

         if(child == null){

          child = new ArrayList<Emp>();

         e_p.setChild(child);

           }

       child.add(e)

      }else{ 

       //将最外层的数据放进结果集中

        reslut.add(e);

      }

  }

return reslut;

}

猜你喜欢

转载自blog.csdn.net/weixin_42012335/article/details/82782077