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);
}
}
}
}
}
}
}

java递归菜单树转换成pojo对象的更多相关文章

  1. Java对象转换成xml对象和Java对象转换成JSON对象

    1.把Java对象转换成JSON对象 apache提供的json-lib小工具,它可以方便的使用Java语言来创建JSON字符串.也可以把JavaBean转换成JSON字符串. json-lib的核心 ...

  2. 转换成json字符串,与json字符串转换成java类型都要先转换成json对象

    转换成json字符串,与json字符串转换成java类型都要先转换成json对象

  3. 使用HIBERNATE的SQL查询并将结果集自动转换成POJO

    在某些场合下,我们可能想使用HIBERNATE的框架提供的SQL查询接口,但是,由于实体没有做映射,HIBERNATE不能把结果集转换成你想要的List<POJO>,本文讨论如何在这种情况 ...

  4. 数据库表转换成javaBean对象小工具

    package test.utils; import java.io.FileWriter;import java.io.IOException;import java.io.PrintWriter; ...

  5. List转换成JSON对象

    List转换成JSON对象 1.准备工作 导入jar包 (1)json-lib-2.3-jdk15.jar (2)commons-beanutils-1.8.0.jar (3)commons-coll ...

  6. List转换成JSON对象报错(五)

    List转换成JSON对象 1.具体错误如下 Exception in thread "main" java.lang.NoClassDefFoundError: org/apac ...

  7. List转换成JSON对象报错(四)

    List转换成JSON对象 1.具体错误如下 Exception in thread "main" java.lang.NoClassDefFoundError: org/apac ...

  8. List转换成JSON对象报错(三)

    List转换成JSON对象 1.具体错误如下 Exception in thread "main" java.lang.NoClassDefFoundError: net/sf/e ...

  9. List转换成JSON对象报错(二)

    List转换成JSON对象 1.具体报错如下 Exception in thread "main" java.lang.NoClassDefFoundError: org/apac ...

随机推荐

  1. sql server 远程备份 bak 删除

    前言: 管理一个公司的一个服务器,最近有一些维护SQLserver数据库活弄,写下防止忘了. 因为公司采用SQL\Redis\MongoDB共用,SQL用来存储基础的结构\权限\等一些杂七杂八的东西. ...

  2. 32位x86处理器编程导入——《x86汇编语言:从实模式到保护模式》读书笔记08

    在说正题之前,我们先看2个概念. 1.指令集架构(ISA) ISA 的全称是 instruction set architecture,中文就是指令集架构,是指对程序员实际"可见" ...

  3. pom.xml无法引入本地的jar和安装到本地安装maven 错误: 找不到或无法加载主类 org.codehaus.plexus.classworlds.launcher.Launcher

    今天maven突然无法引入本地maven库的jar包,导致maven工程出错,然后就准备重装maven ,开始只是将环境变量删除,将之前的压缩包解压,再重新配置环境 变量,可是配置好后在dos窗口 输 ...

  4. 【Xshell】设置XShell最大的显示行数

    选择会话,依次点击“文件"->"属性”,打开“会话属性”窗体   在“会话属性”窗体中,选择“终端”,下图中红框标注的地方是“缓冲区大小”,修改其中的值,其范围在0~2,14 ...

  5. Thrift笔记(四)--Thrift client源码分析

    thrift文件 namespace java com.gxf.demo namespace py tutorial typedef i32 int // We can use typedef to ...

  6. kafka自定义序列化器

    <kafka权威指南> Customer.java public class Customer { private int customId; private String custome ...

  7. TensorFlow入门:安装常用的依赖模块

    TensorFlow运行中常用到一些Python第三方模块: numpy 存储和处理大型矩阵的科学计算包 maplotlib 最著名的绘图库 jupyter scikit-image 图像预处理 li ...

  8. struts2====之=======初识struts

    ---恢复内容开始--- 1.什么是web框架? 目前应用得较多的三种服务器瑞页面描写技术就是ASP,JSP和PHP.J S P通过在HTMLJî面 文件中嵌入J a v a脚本代码,从而实现动态网页 ...

  9. The eighteen day

    27th Nov 2018 Setting goals is the first step in turning the invisible into the visiable   ---Tony R ...

  10. HTML 5网页设计入门必读(书)

    今天看了一本由人民邮电出版社出版.邢薇薇 郭俊飞 王雪翻译的<HTML 5网页设计入门必读>,在此整理一下知识点,以及写一些自己的读后感. 本书的开章还是和大部分HTML 5书籍一样,用极 ...