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. Redis启动和关闭

    带配置文件启动 ./redis-server redis.conf 关闭 无密码模式  ./redis-cli -h xxx -p xxx shutdown 密码模式  ./redis-cli -h ...

  2. 守护客户数据价值:企业级NewSQL HTAP分布式云TBase架构详解

    欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 作者:jasonys,隶属于腾讯技术工程事业群数据平台部,负责TBase数据的技术研发和架构设计,有超过10年的数据库内核开发设计经验,完成 ...

  3. 腾讯毛华:智能交互,AI助力下的新生态

    欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 演讲人:毛华 腾讯云语音云总经理 背景:5月23-24日,以"焕启"为主题的腾讯"云+未来"峰会在广 ...

  4. UWP 应用获取各类系统、用户信息 (1) - 设备和系统的基本信息、应用包信息、用户数据账户信息和用户账户信息

    应用开发中,开发者时常需要获取一些系统.用户信息用于数据统计遥测.问题反馈.用户识别等功能.本文旨在介绍在 Windows UWP 应用中获取一些常用系统.用户信息的方法.示例项目代码可参见 Gith ...

  5. 在 Azure Web 应用中创建 Java 应用程序

    本分步指南将通过 Azure Web 应用帮助您启动并运行示例 Java 应用程序.除 Java 外,Azure Web 应用还支持其他语言,如 PHP..NET.Node.JS.Python.Rub ...

  6. SGI STL红黑树中迭代器的边界值分析

    前言 一段程序最容易出错的就是在判断或者是情况分类的边界地方,所以,应该对于许多判断或者是情况分类的边界要格外的注意.下面,就分析下STL中红黑树的迭代器的各种边界情况.(注意:分析中STL使用的版本 ...

  7. angular2-模板驱动表单

    app.module.ts 导入 FormsModule  import { NgModule } from '@angular/core'; import { BrowserModule } fro ...

  8. json中定义数组

    我们经常会看到在js中定义普通函数: function f1(a,b){ console.log(a+b); } f1(); 今天我们看一下如何在json里边定义函数并调用: var json = { ...

  9. canvas-菜鸟版画布时钟

    这是以前自己练习写的一个画布时钟 <!DOCTYPE html><html lang="en"> <head> <meta charset ...

  10. Eclipse Configuration

    *** Date: 2013年9月12日星期四中国标准时间上午8时41分50秒 *** Platform Details: *** System properties:applicationXMI=o ...