java实现菜单转换为树的格式

菜单一般有很多级,然后数据库一般都是存的  自己的id,父id,名字

这个时候想转化成菜单树的格式就需要自己编写代码实现了。

1.获取所有的菜单元素

2.遍历所有的菜单元素,找到一级菜单元素( pid 为null的就是一级菜单 )

3.递归查找子菜单,用一级菜单的 id 去匹配所有的菜单元素,如果 其他的菜单元素的 pid 为 一级菜单的 id,则证明该菜单是一级菜单的子元素,然后重复此步骤,知道 找不到子元素,则该这一个支结束

==>代码实现:

Element 菜单元素里面添加 List<Element> childs; 子菜单,用来装子菜单

import java.util.List;

public class Element {
    private String id;
    private String pid;
    private String name;

    private List<Element> childs;

    ....省略 getset

}

GetTree类

思路我已经说了,看代码的时候注意看注释

import java.util.ArrayList;
import java.util.List;

public class GetTree {

    // 菜单节点s
    private  static List<Element> list = new ArrayList<>();

    static {
        list.add( new Element("1",null,"执法考评") );
        list.add( new Element("2","1","日常考评") );
        list.add( new Element("5","1","行政考评") );
        list.add( new Element("4","2","警情考评") );
        list.add( new Element("6","4","刑事考评") );
        list.add( new Element("3","1","抽案考评") );
        list.add( new Element("7",null,"一级菜单") );
    }

    public List<Element> getTree() {

        List<Element> baseLists = new ArrayList<>();
        // 总菜单,出一级菜单,一级菜单没有父id
        for (Element e: list) {
            if( e.getPid()==null ){
                baseLists.add( e );
            }
        }
        // 遍历一级菜单
        for (Element e: baseLists) {
            // 将子元素 set进一级菜单里面
            e.setChilds( getChild(e.getId(),list) );
        }

        return baseLists;
    }

    /**
     * 获取子节点
     * @param pid
     * @param elements
     * @return
     */
    private List<Element> getChild(String pid , List<Element> elements){
        List<Element> childs = new ArrayList<>();
        for (Element e: elements) {
            if(e.getPid()!=null){
                if(e.getPid().equals( pid )){
                    // 子菜单的下级菜单
                    childs.add( e );
                }
            }
        }
        // 把子菜单的子菜单再循环一遍
        for (Element e: childs) {
            // 继续添加子元素
            e.setChilds( getChild( e.getId() , elements ) );
        }

        //停下来的条件,如果 没有子元素了,则停下来
        if( childs.size()==0 ){
            return null;
        }
        return childs;
    }

}

实现效果:

  • 3
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值