前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >java最优化的方法递归构造树形结构

java最优化的方法递归构造树形结构

作者头像
十分钟空间
发布2022-08-17 14:10:37
3K0
发布2022-08-17 14:10:37
举报
文章被收录于专栏:Springboot框架学习

1.首先和大家看一下运行后的效果

2.element ui中el-tree的写法

    el-tree是element uI的中树形结构的写法,主要使用的场景是在需要父级和子级的情况下使用,下面看一下前台的写法。

代码语言:javascript
复制
<el-tree 
 :data="sysMenuTreeData" 
 show-checkbox default-expand-all node-key="menuId" 
 ref="tree" highlight-current
 :default-checked-keys='defaultExpandedKeys' 
 :props="defaultProps"
 @node-click="handleNodeClick">
</el-tree>
代码语言:javascript
复制
request({
  url:'/sys/SysMenu/geButtonTreeData',
  method: 'POST',
  data: {}
}).then((res) => {
  if (res.data != null) {
    this.sysMenuTreeData = res.data;
  } else {
    this.sysMenuTreeData = "";
  }
}).catch((response) => {
  this.sysMenuTreeData="";
});

3.spring boot后台

java后台递归构造树形结构,其实很简单,设计表结构的时候定义父级字段和子级字段,然后定义一个树形结构的实体,比如treeDto,建立实体的父子级关系。然后把数据按照父子级关系循环递归就可以了。

首先定义一个实体dto

代码语言:javascript
复制
public class SysMenuTreeOutVo extends SysMenu {


    private String id;
    private String value;
    private String label;
    private List<SysMenuTreeOutVo> children;


    public String getId() {
        return id;
    }


    public void setId(String id) {
        this.id = id;
    }


    public String getLabel() {
        return label;
    }


    public void setLabel(String label) {
        this.label = label;
    }


    public List<SysMenuTreeOutVo> getChildren() {
        return children;
    }


    public void setChildren(List<SysMenuTreeOutVo> children) {
        this.children = children;
    }


    public String getValue() {
        return value;
    }


    public void setValue(String value) {
        this.value = value;
    }

下面是controller的代码重点来了,循环递归数据

代码语言:javascript
复制
/**
 * 获取菜单数据
 * @return
 */
@RequestMapping(value = "/getMenuTree", method = {RequestMethod.GET, RequestMethod.POST})
@ResponseBody
public ResultInfo getSysRole() {
    List<SysMenuTreeOutVo> sysMenuList = this.sysMenuService.getSysMenuTree();
    List<SysMenuTreeOutVo> resultList = new ArrayList<SysMenuTreeOutVo>();
    // 把数据组织成树
    SysMenu sysMenu = new SysMenu();
    sysMenu.setMenuId("");
    resultList = this.listToTree(sysMenu, sysMenuList);

    // 定义传参
    ResultInfo result = new ResultInfo();
    result.setData(resultList);
    return result;
}


/**
 * 构造树形菜单
 * @param parmData 父级
 * @param list 子级数据
 * @return
 */
private List<SysMenuTreeOutVo> listToTree(SysMenu parmData, List<SysMenuTreeOutVo> list) {
    List<SysMenuTreeOutVo> childData = new ArrayList<SysMenuTreeOutVo>();
    for (SysMenuTreeOutVo data : list) {
        if ((parmData.getMenuId() == null && data.getParentId() == null) ||
                data.getParentId() != null && data.getParentId().equals(parmData.getMenuId())
        ) {
            childData.add(data);
        }
    }

    List<SysMenuTreeOutVo> resultList = new ArrayList<SysMenuTreeOutVo>();
    for (SysMenuTreeOutVo item : childData) {
        item.setId(item.getMenuId());
        item.setValue(item.getMenuId());
        item.setLabel(item.getMenuName());
        item.setChildren(this.listToTree(item, list));
        resultList.add(item);
    }
    return resultList;
}

总结

      java的树形递归结构基本上是这么实现,主要的内容在于后台给前台数据的整理,只要后台整理成前台需要的json数据,前台自动加载树形结构。后续我会分享更多的技术相关的内容,请大家多多关注。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020/12/07 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 2.element ui中el-tree的写法
    • 3.spring boot后台
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档