小狼-java菜单树的查询/快速查找菜单树

之前看到一位大佬的菜单树写法,但是找不到了,所以按着当时的理解编了一个查找菜单树,如果你还是一层层的套循环,那肯定没有这种炫酷

private ArrayList<Xiaolang> getTree(Long id, List<Xiaolang> list) {
        //因为根节点可能有多个,所以我们用一个list存储没有父节点的根节点
        ArrayList<Xiaolang> returnList = new ArrayList<>();
        //使用map将list的数据存储到map中,方便下面使用,同时这个map也是整个代码的精华所在
        //map的key存储id,value存储对象
        HashMap<Long, Xiaolang> personMap = new HashMap<>();
        for (int i = 0; i < list.size(); i++) {
            Xiaolang person = list.get(i);
            personMap.put(person.getId(), person);
        }
    
        //现在开始一个个遍历我们的list列表,逐个加入到树中来
        for (int i = 0; i < list.size(); i++) {
            Xiaolang person = list.get(i);
            if (person.getParentId() == null) {
                //如果没有父id,那他就是顶级树节点,就将它存在我们返回的列表中
                returnList.add(person);
            } else {
                //如果有父id,那他就是子节点
                Long parentId = person.getParentId();
                //树结构被打乱后处理(子树不进行连接)
                if (personMap.get(parentId) == null) {
                    continue;
                }
                //我们去找本次循环元素的父元素,然后将子放在父下
                if (personMap.get(parentId).getChildMap() == null) {
                    //此时我们是第一个连接在父节点下的子,新建对象并存储
                    TreeMap<Long, Xiaolang> map = new TreeMap<Long, Xiaolang>();
                    map.put(person.getId(), person);
                    personMap.get(parentId).setChildMap(map);
                    //将孩子放入到list里面
                    ArrayList<Xiaolang> list1 = new ArrayList<>();
                    list1.add(person);
                    personMap.get(parentId).setChildList(list1);
                } else {
                    //此时我们不是第一个连接在父节点下的子,直接存储
                    personMap.get(parentId).getChildMap().put(person.getId(), person);
                    personMap.get(parentId).getChildList().add(person);
                }
            }
        }
  
        //当指定了菜单树的id时候,我们会将该节点部分的数据返回过去
        if (id != null) {
            ArrayList<Xiaolang> sectionTree = new ArrayList<>();
            sectionTree.add(personMap.get(id));
            return sectionTree;
        }
        return returnList;
    }
​

我们前端说不能接收map,所以我在其中加了个list。

public class Xiaolang {
​
    private String personId;
​
    /**
     * 树查询的子map
     */
    private TreeMap<Long,Xiaolang> childMap;
​
​
    /**
     * 树查询的列表
     */
    private ArrayList<Xiaolang> childList;
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值