zoukankan      html  css  js  c++  java
  • java递归菜单树转换成pojo对象

    package com.cjonline.foundation.authority.pojo;
    
    import java.util.ArrayList;
    import java.util.Collections;
    import java.util.Iterator;
    import java.util.List;
    
    import org.apache.log4j.Logger;
    
    import com.cjonline.foundation.util.CheckNullEmpty;
    
    /**
     * 实现递归的帮助类,最终的结果可以描述成如下:
     * 根(root)
     * --1(子系统1)
     * -----1.1
     * -------1.1.1
     * -------1.1.2
     * ------- ....
     * -----1.2
     * --2(子系统2)
     * -----2.1
     * -------2.1.1
     * -------2.1.2
     * ------- ....
     * -----2.2
     */
    public class ModelList implements java.io.Serializable {
    
        private static final Logger logger = Logger.getLogger(ModelList.class);
    
        private static final long serialVersionUID = 6384598893693849820L;
    
        /**
         * model代表当前模块
         */
        private SysModel model;
        /**
         * models代表当前模块下面的子模块,
         */
        private List<ModelList> subList = new ArrayList<ModelList>();
    
        /**
         * 菜单级别
         */
        private int flag = 0;
    
        public SysModel getModel() {
            return model;
        }
        public void setModel(SysModel model) {
            this.model = model;
        }
        public List<ModelList> getSubList() {
            return subList;
        }
        public void setSubList(List<ModelList> subList) {
            this.subList = subList;
        }
        public void setFlag(int flag) {
            this.flag = flag;
        }
    
        public int getFlag() {
            return flag;
        }
        /**
         * 递归方法根据传入的模块集合形成层级菜单
         */
        @SuppressWarnings("unchecked")
        public ModelList createTree2(List<SysModel> ms) {
            //
            ModelList node = new ModelList();
            ArrayList<SysModel> fu = new ArrayList<SysModel>();// 用来存储parentId为空的父节点;
            ArrayList<SysModel> childs = new ArrayList<SysModel>();// 用来存储不是系统的模块
            // 将系统和模块菜单分开
            for (Iterator<SysModel> it = ms.iterator(); it.hasNext();) {
                SysModel mode = (SysModel) it.next();
                String parentId = mode.getParentId();
                if (parentId == null || parentId.equals("")) {
                    fu.add(mode);
                } else {
                    childs.add(mode);
                }
            }
            //由于是多个子系统,首先要找出有多少个子系统
            for (SysModel model : fu) {
                ModelList node1 = new ModelList();
                node1.setFlag(0);
                node1.setModel(model);
                node.subList.add(node1);
                appendChild(node1, childs);
            }
            return node;
    
        }
    
        /**
         * node节点 childs为所以系统下的子节点
         */
        public void appendChild(ModelList node, List<SysModel> childs) {
            if (node != null) {
                String systemId = node.getModel().getSystemId();
                String smid = node.getModel().getSysModuleId();
                int flag = node.getFlag();
                if (childs != null && childs.size() > 0) {
                    for (SysModel model : childs) {
                        String systemId2 = model.getSystemId();
                        String parentId2 = model.getParentId();
                        if (systemId.equals(systemId2)) {
                            if (parentId2.equals(smid)) {
                                ModelList child = new ModelList();
                                child.setModel(model);
                                child.setFlag(flag + 1);
                                node.getSubList().add(child);
                                appendChild(child, childs);
                            }
                        }
                    }
                }
            }
        }
    }
  • 相关阅读:
    【算法】LeetCode算法题-Count And Say
    【算法】LeetCode算法题-Search Insert Position
    使用POI设置excel背景色
    Ubuntu中开启MySQL远程访问功能,并将另一个数据库服务器中的数据迁移到新的服务器中
    利用mybatis_generator自动生成Dao、Model、Mapping相关文件
    Meven笔记
    js调用百度地图API创建地图
    MySQL中日期与字符串相互转换,并进行日期比较查询
    java中将汉字转换成16进制
    Java中将16进制字符串转换成汉字
  • 原文地址:https://www.cnblogs.com/lbangel/p/3248293.html
Copyright © 2011-2022 走看看