java递归菜单树转换成pojo对象

时间:2022-08-12 04:04:40 


  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);
                        }
                    }
                }
            }
        }
    }
}
 
标签:递归,菜单树,pojo
0
投稿

猜你喜欢

  • Spring Boot示例代码整合Redis详解

    2022-03-20 19:23:37
  • Java中final关键字的用法总结

    2023-01-06 19:47:48
  • c#数据绑定之linq使用示例

    2022-07-17 11:07:22
  • Java调用.dll文件的方法

    2023-11-23 21:16:22
  • 一篇文章带你玩转Spring bean的终极利器

    2022-08-20 10:47:33
  • Android弹出窗口实现方法

    2022-05-25 06:27:31
  • Android打包上传AAR文件到Maven仓库的示例

    2023-07-02 15:14:14
  • Androd 勇闯高阶性能优化之布局优化篇

    2023-01-22 12:12:15
  • Android activity动画不生效原因及解决方案总结

    2022-12-18 16:31:41
  • IDEA MyBatis Plugins自动生成实体类和mapper.xml

    2021-07-24 01:26:37
  • 浅谈Java日志框架slf4j作用及其实现原理

    2022-11-02 19:02:04
  • springcloud项目占用内存好几个G导致服务器崩溃的问题

    2023-03-30 09:54:25
  • Android实现未读消息小红点显示实例

    2022-05-18 07:57:27
  • Android类FileDownloadList分析

    2022-06-17 02:11:36
  • Java PreparedStatement用法详解

    2023-08-08 20:20:51
  • Android自定view画圆效果

    2021-06-05 21:45:52
  • Android实现扫一扫识别数字功能

    2021-09-27 09:30:57
  • 编写Java代码对HDFS进行增删改查操作代码实例

    2023-07-08 11:46:42
  • SpringBoot快速配置数据源的方法

    2023-07-28 13:22:42
  • c++难以发现的bug(有趣)

    2022-01-27 17:01:41
  • asp之家 软件编程 m.aspxhome.com