父子关系的List结果集数据转换为层级树状结果数据

使用情况:数据库设计的结构为父子结构数据,一般情况下我们通过查询操作查询出来的数据为List数据结果集,如果是普通数据当然就可以直接返回给前端了,但在前端需要树状结构的数据时我们就需要对这些数据进行层级处理一下了,以下便是我的处理方法代码:菜鸟程序员,口才或代码不好还望指导。此为个人笔记,不喜勿喷!

 

首先你的从数据库查出数据,这里就不细说过程了,也就是通过mapper.xml=>dao=>service=>controller这么一层过程,

结果如此:List<SysMenuVo> data = sysMenuService.queryMenu(roleId);

data为从数据库查出来的数据,单纯的查询返回的数据只是普通的等级数据,但数据中有子父级关系需要通过树状结构展示的时候就需要我们处理以下了,个人方法如下:

//再创建一个List用来存放最终的树状结构数据
List<Map<String, Object>> MenuList = new ArrayList<Map<String, Object>>();

//把从数据库查询出来的数据遍历处理
for(SysMenuVo vo: data){
   Map<String,Object> map = new HashMap<String,Object>();
   if("0".equals(vo.getpId())){//通过判断,0代表没有父级,也就是一级
      map.put("children", getChildren(data,vo.getMenuId()));//继续往一级下面遍历,调用下面的处理方法,放入树状结构
      map.put("id", vo.getMenuId());
      map.put("label", vo.getMenuDes());
      map.put("pid", vo.getpId());
      MenuList.add(map);//先把一级存入结果
   }
   
}  
//结果集转树状结构
public List<Map<String, Object>> getChildren(List<SysMenuVo> data,Long menuId){//参数为数据库的(原数据,一级id)
   List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();
   if(data==null||data.size()==0||menuId==null){
      return list;
   }
   
   for(SysMenuVo vo:data ){
      Map<String,Object> map = new HashMap<String,Object>();
      if(menuId.toString().equals(vo.getpId())){//如果本级id与下面数据的父id相同,就说明是子父级关系
         map.put("children", getChildren(data,vo.getMenuId()));//递归,查询子级下的子级
         map.put("id", vo.getMenuId());
         map.put("label", vo.getMenuDes());
         map.put("pid", vo.getpId());
         list.add(map);
      }
      
   }
   return list;
}
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值