• 多级菜单展示


    import java.util.*;
    
    /**
     * ToDo
     *
     * @author Lyle
     * @date 2020/5/19
     */
    public class Menu {
    
            // 菜单id
            private String id;
            // 菜单名称
            private String name;
            // 父菜单id
            private String parentId;
            // 菜单url
            private String url;
            // 菜单图标
            private String icon;
            // 菜单顺序
            private int order;
            // 子菜单
            private List<Menu> children;
            // ... 省去getter和setter方法以及toString方法
    
    
        /*
      * 排序,根据order排序
      */
        public Comparator<Menu> order(){
            Comparator<Menu> comparator = new Comparator<Menu>() {
                @Override
                public int compare(Menu o1, Menu o2) {
                    if(o1.getOrder() != o2.getOrder()){
                        return o1.getOrder() - o2.getOrder();
                    }
                    return 0;
                }
            };
                return comparator;
        }
    
    
        /**
         * 生成树的方法
         * @return
         */
        public Map<String,Object> findTree(){
            Map<String,Object> data = new HashMap<String,Object>();
            try {//查询所有菜单
                List<Menu> allMenu = menuDao.findTree();
                //根节点
                List<Menu> rootMenu = new ArrayList<Menu>();
                for (Menu nav : allMenu) {
                    if(nav.getParentId().equals("0")){//父节点是0的,为根节点。
                        rootMenu.add(nav);
                    }
                }
          /* 根据Menu类的order排序 */
                Collections.sort(rootMenu, order());
                //为根菜单设置子菜单,getClild是递归调用的
                for (Menu nav : rootMenu) {
            /* 获取根节点下的所有子节点 使用getChild方法*/
                    List<Menu> childList = getChild(nav.getId(), allMenu);
                    nav.setChildren(childList);//给根节点设置子节点
                }
                /**
                 * 输出构建好的菜单数据。
                 *
                 */
                data.put("success", "true");
                data.put("list", rootMenu);
                return data;
            } catch (Exception e) {
                data.put("success", "false");
                data.put("list", new ArrayList());
                return data;
            }
        }
    
    
    
        /**
         * 获取子节点
         * @param id 父节点id
         * @param allMenu 所有菜单列表
         * @return 每个根节点下,所有子菜单列表
         */
        public List<Menu> getChild(String id,List<Menu> allMenu){
            //子菜单
            List<Menu> childList = new ArrayList<Menu>();
            for (Menu nav : allMenu) {
                // 遍历所有节点,将所有菜单的父id与传过来的根节点的id比较
                //相等说明:为该根节点的子节点。
                if(nav.getParentId().equals(id)){
                    childList.add(nav);
                }
            }
            //递归
            for (Menu nav : childList) {
                nav.setChildren(getChild(nav.getId(), allMenu));
            }
            Collections.sort(childList,order());//排序
            //如果节点下没有子节点,返回一个空List(递归退出)
            if(childList.size() == 0){
                return new ArrayList<Menu>();
            }
            return childList;
        }
        public String getId() {
            return id;
        }
    
        public void setId(String id) {
            this.id = id;
        }
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public String getParentId() {
            return parentId;
        }
    
        public void setParentId(String parentId) {
            this.parentId = parentId;
        }
    
        public String getUrl() {
            return url;
        }
    
        public void setUrl(String url) {
            this.url = url;
        }
    
        public String getIcon() {
            return icon;
        }
    
        public void setIcon(String icon) {
            this.icon = icon;
        }
    
        public int getOrder() {
            return order;
        }
    
        public void setOrder(int order) {
            this.order = order;
        }
    
        public List<Menu> getChildren() {
            return children;
        }
    
        public void setChildren(List<Menu> children) {
            this.children = children;
        }
    }
  • 相关阅读:
    IOS-网络(大文件下载)
    IOS-网络(小文件下载)
    IOS-网络(监听网络状态)
    IOS-网络(数据安全:MD5加密)
    IOS-网络(发送JSON数据给服务器和多值参数)
    IOS-网络(GET请求和POST请求、HTTP通信过程、请求超时、URL转码)
    IOS-网络(JSON解析数据与XML解析数据)
    IOS-网络(HTTP请求、同步请求、异步请求、JSON解析数据)
    IOS-CoreData(增删改查、表关联、分页和模糊查询、多个数据库)
    App6种常见的数据加载设计
  • 原文地址:https://www.cnblogs.com/lyle-liu/p/12920240.html
Copyright © 2020-2023  润新知