MenuTreeUtil菜单树形递归工具类

Posted cwshuo

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MenuTreeUtil菜单树形递归工具类相关的知识,希望对你有一定的参考价值。



import com.aaa.controller.vm.MenuVM;
import com.aaa.entity.Menu;

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

/**
 * 组装菜单树工具类
 * Created by cws
 * @author Administrator
 */
public class MenuTreeUtil {

    public static MenuVM getTree(List<Menu> list) {

        //判断是否有获取到数据
        if (list == null || list.size() < 1) {
            return null;
        }
        return buildTree(getRoot(list), list);
    }

    private static MenuVM buildTree(MenuVM pnode, List<Menu> nodes) {
        List<MenuVM> childs = new ArrayList<>();
        for (Menu tmp : nodes) {
            if (pnode.getId().equals(tmp.getParentId())) {
                childs.add(new MenuVM(tmp));
            }
        }

        //二次递归遍历子节点
        if (childs.size() > 0) {
            pnode.setSubMenu(childs);
            for (MenuVM ptmp : childs) {
                buildTree(ptmp, nodes);
            }
        }
        return pnode;
    }

    /**
     * 获取一级目录
     *
     * @param list
     */
    private static MenuVM getRoot(List<Menu> list) {
        for (Menu po : list) {
            if ("#".equals(po.getParentId())) {
                return new MenuVM(po);
            }
        }
        return null;
    }


    /**
     * @param list
     */
    public static List<MenuVM> getMenu(List<Menu> list) {
        //判断是否有获取到数据
        if (list == null || list.size() < 1) {
            return null;
        }

        return getTree(list) == null ? null : getTree(list).getSubMenu();
    }

}

以上是关于MenuTreeUtil菜单树形递归工具类的主要内容,如果未能解决你的问题,请参考以下文章

MySQL查询父节点下面的所有子孙节点,查询用户列表时多级(公司)部门处理,根据反射,递归树形结构工具类

MySQL查询父节点下面的所有子孙节点,查询用户列表时多级(公司)部门处理,根据反射,递归树形结构工具类

Vue.js怎样把递归组件构建为树形菜单

jstl处理递归问题+jquery,tree无限级树形菜单+简单实用案例

vue递归组件—开发树形组件Tree--(构建树形菜单)

动态树形菜单的几种递归写法小结