java递归菜单树转换成pojo对象
发布时间:2022-08-12 04:04:40
标签:递归,菜单树,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);
}
}
}
}
}
}
}


猜你喜欢
- this.tclMain.Controls["tpgSize"].Parent = null; this.tclMain
- 本文实例为大家分享了Android实现屏幕录制功能的具体代码,供大家参考,具体内容如下1.效果图:2.添加依赖 dependenc
- 前言EventBus框架EventBus是一个通用的叫法,例如Google出品的Guava,Guava是一个庞大的库,EventBus只是它
- 1.属性驱动 前台表单中字段的name和后台action中的属性字段的名称必须保持一致;2.域驱动 前台表单中字段的name应该为:obje
- 本文实例讲述了Java基于Tcp的基础聊天功能。分享给大家供大家参考,具体如下:最基础的聊天,用户端和服务器端每次说一句,而且严格规定了先后
- 真正的帮助大家理解红黑树:一、红黑树所处数据结构的位置:在JDK源码中, 有treeMap和JDK8的HashMap都用到了红黑树去存储红黑
- 今天为大家介绍一下语音动弹界面的实现,新版本的客户端大家应该都看过了,这里我就只简单的介绍一下控件布局了。你可以在这里看到本控件的完整源码:
- 本文实例为大家分享了Android创建自定义样式圆角dialog对话框的具体代码,供大家参考,具体内容如下效果如上,圆角对话框,标题和正文都
- 本文实例讲述了C++求四个正整数最大公约数的方法。分享给大家供大家参考,具体如下:/** 作 者: 刘同宾* 完成日期:2012 年 11
- 本文实例讲述了Java设计模式之 * 模式。分享给大家供大家参考,具体如下: * 模式有三个要素——事件源、事件对象、 * 。事件源:顾名思
- 所谓前人栽树,后人乘凉,在此感谢博主的贡献。 原文:边缘凹凸的卡劵效果先上效果图:我实现的效果和原博主实现的效果是不一样的,我是左右边缘凹凸
- 前言:对于一个程序员来说,尤其是在java web端开发的程序员,三大框架:Struts+Hibernate+Spring是必须要掌握熟透的
- 本文实例讲述了Java中的异常和处理机制。分享给大家供大家参考,具体如下:简介程序运行时,发生的不被期望的事件,它阻止了程序按照程序员的预期
- 1. 概述官方JavaDocsApi: javax.swing.JPanelJPanel,面板。JPanel 是在开发中使用频率非常高的一般
- 一、return语句执行顺序finally语句是在return语句执行之后,return语句返回之前执行的package exception
- 目录一 . 前言二 . 流程梳理2.1 实例化创建2.1.1 doGetBean 入口2.1.2 doGetBean 补充节点2.1.3 A
- 本文实例讲述了C#实现图像锐化的方法。分享给大家供大家参考。具体如下://定义图像锐化函数private static Bitmap Sha
- 不多说废话,直接进入主菜!!步骤:1.搭建SpringBoot的开发环境,略(有不会的可以私信我)。2.编写一个自定义异常,自定义异常需要继
- 本文实例为大家分享了Android studio实现PopupWindow弹出框的具体代码,供大家参考,具体内容如下实现步骤:第一步:自定义
- 功能介绍功能:群聊+私发+上线提醒+下线提醒+查询在线用户文件Utils需要用maven导入下面两个包 <dependency>