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 subList = new ArrayList();

/**

* 菜单级别

*/

private int flag = 0;

public SysModel getModel() {

return model;

}

public void setModel(SysModel model) {

this.model = model;

}

public List getSubList() {

return subList;

}

public void setSubList(List subList) {

this.subList = subList;

}

public void setFlag(int flag) {

this.flag = flag;

}

public int getFlag() {

return flag;

}

/**

* 递归方法根据传入的模块集合形成层级菜单

*/

@SuppressWarnings("unchecked")

public ModelList createTree2(List ms) {

//

ModelList node = new ModelList();

ArrayList fu = new ArrayList();// 用来存储parentId为空的父节点;

ArrayList childs = new ArrayList();// 用来存储不是系统的模块

// 将系统和模块菜单分开

for (Iterator 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 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);

}

}

}

}

}

}

}

更多java递归菜单树转换成pojo对象相关文章请关注PHP中文网!

本文原创发布php中文网,转载请注明出处,感谢您的尊重!

菜单转换Java_java递归菜单树转换成pojo对象相关推荐

  1. Spring的@RequestBody非常牛x,可以将提交的json直接转换成POJO对象。

    Spring的@RequestBody非常牛x,可以将提交的json直接转换成POJO对象.

  2. MySQL部门或菜单父子节点递归实现树查询

    目前的mysql版本中并不支持直接的递归查询,但是通过递归到迭代转化的思路,可以在一句SQL内实现树的递归查询 下面给一个小示例,后续在贴上调用的代码(代码会贴在最后请注意) MySQL递归查询所有子 ...

  3. 任意进制转换java_Java 任意进制转换(两种方式)

    本文提供两种Java实现任意进制转换的方法: 方法一:利用 Integer 实现进制转换 1. Integer类的方法toBinaryString(),Integer.toOctalString(), ...

  4. 二叉树-树转二叉树 使用队列,编写transfrom函数,将普通树转换成对应的二叉树。

    树转二叉树 使用队列,编写transfrom函数,将普通树转换成对应的二叉树.二叉树的相关定义如下: typedef int DataType; typedef struct Node{DataTyp ...

  5. 算法基础11 —— 树入门(二叉树的遍历以及构造 + 普通树转换成二叉树 + 例题 + 二叉树的一些操作)

    字符二叉树的遍历 对于以上二叉树 先序遍历为(根左右) : ABCDEFG 中序遍历为(左根右) : CBEDAFG 后序遍历为(左右根) : CEDBGFA 层序遍历:(从左往右.从上往下) ABF ...

  6. 如何将一棵树转换成二叉树

    题目: 如何将一棵树转换成二叉树? 解答: 1. 将 节点的孩子 放在左子树: 2. 将 节点的兄弟 放在右子树. 延伸: 任何一棵树都可以表示成二叉树,并不是任何一棵二叉树都可以表示成树.那么树多还 ...

  7. 使用递归将十进制转换成任意进制(Number Conversion)

    关于递归 什么是递归? 说白了,就是函数自己调用自己,然后被调用的函数继续调用自己,这将无限循环下去,除非代码中有终止调用链的的内容. 解释一下递归的所经历的过程 递归需要有边界条件.递归前进段和递归 ...

  8. C代码实现将一颗树转换成二叉树(给定树)

    将树转换成二叉树的方法: 1.加线.在所有的兄弟结点之间加一条线. 2.去线.树中的每个结点,只保留它与第一个孩子结点的连线,删除其他孩子结点之间的连线. 3.调整.以树的根结点为轴心,将整个树调节一 ...

  9. jquery对象PHP转换,JavaScript_jQuery对象与DOM对象之间的相互转换,1、jQuery对象转换成DOM对象 jQue - phpStudy...

    jQuery对象与DOM对象之间的相互转换 1.jQuery对象转换成DOM对象 jQuery对象不能使用DOM中的方法,但如果对jQuery对象所提供的方法不熟悉,或者jQuery没有封装想要的方法 ...

最新文章

  1. 二进制的mysql怎么装_使用二进制演示MySQL安装步骤
  2. mvc5入门示例博客(有惊喜)
  3. python相关概念
  4. 【Android 逆向】修改运行中的 Android 进程的内存数据 ( Android 命令行中获取要调试的应用进程的 PID | 进程注入调试进程内存的 so 库 )
  5. 德意志银行CEO:将逐渐用 AI 替代人工,银行决不会一成不变 凤凰科技 09-08 20:41 原标题:德意志银行CEO:将逐渐用 AI 替代人工,银行决不会一成不变 雷锋网AI金融评论报道,外媒i
  6. php的yii框架开发总结2
  7. ubuntu 下使用mysql
  8. Servlet详细讲解
  9. Android 自定义View自定义属性的声明
  10. apache配置文件“注解内容”全翻译
  11. VGG19 基本网络结构图
  12. matlab qpsk 星座图,QPSK误码率和星座图MATLAB仿真
  13. opencv获取图像的像素值
  14. iconfont添加新图标_IconFont图标引用的方法步骤(代码)
  15. Aras Innovator: AML包
  16. termux python 打开摄像头_python+opencv 电脑调用手机的摄像头
  17. java 条形码校验_java 实现条形码ENA-13校验码计算方法
  18. 方法finalizer()的应用
  19. 云服务器是widows7系统,云服务器win7系统
  20. 怎么能避免浏览器请求超时_浏览器所允许的http请求最长的响应时间?

热门文章

  1. Python3.7在 Geany下编译出现SyntaxError: Non-UTF-8 code starting with '\xb3'错误及实例化方法时提示没有实参的解决方法。
  2. mysql语句将两列合并一列_mysql – SQL选择将两列合并为一列
  3. C语言程序设计实践教程 邹显春pdf
  4. 笔记本win10正在更新怎么关闭计算机,教你win10如何关闭自动更新
  5. 计算机专硕_2021年北京科技大学计算机专硕考研初复试考研经验分享、择校备考分析指导...
  6. 当button具有disabled属性时,el-tooltip也失效。解决办法
  7. 岂无远道思亲泪,不及高堂念子心,堂上二老既活佛,何用灵山朝世尊。
  8. 由于轮播图片超宽造成的影响
  9. 原创 使用docker 安装CVAT并使用
  10. itext Pdf页眉/页脚/水印