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
![](/images/zang.png)
![](/images/jiucuo.png)
猜你喜欢
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
![](https://img.aspxhome.com/file/2023/0/98220_0s.jpg)
Java调用.dll文件的方法
2023-11-23 21:16:22
一篇文章带你玩转Spring bean的终极利器
2022-08-20 10:47:33
![](https://img.aspxhome.com/file/2023/1/62171_0s.jpg)
Android弹出窗口实现方法
2022-05-25 06:27:31
Android打包上传AAR文件到Maven仓库的示例
2023-07-02 15:14:14
![](https://img.aspxhome.com/file/2023/8/138978_0s.png)
Androd 勇闯高阶性能优化之布局优化篇
2023-01-22 12:12:15
![](https://img.aspxhome.com/file/2023/8/87278_0s.png)
Android activity动画不生效原因及解决方案总结
2022-12-18 16:31:41
IDEA MyBatis Plugins自动生成实体类和mapper.xml
2021-07-24 01:26:37
![](https://img.aspxhome.com/file/2023/8/83048_0s.jpg)
浅谈Java日志框架slf4j作用及其实现原理
2022-11-02 19:02:04
![](https://img.aspxhome.com/file/2023/8/66228_0s.png)
springcloud项目占用内存好几个G导致服务器崩溃的问题
2023-03-30 09:54:25
![](https://img.aspxhome.com/file/2023/6/61236_0s.png)
Android实现未读消息小红点显示实例
2022-05-18 07:57:27
![](https://img.aspxhome.com/file/2023/0/117140_0s.jpg)
Android类FileDownloadList分析
2022-06-17 02:11:36
Java PreparedStatement用法详解
2023-08-08 20:20:51
![](https://img.aspxhome.com/file/2023/1/58061_0s.png)
Android自定view画圆效果
2021-06-05 21:45:52
![](https://img.aspxhome.com/file/2023/8/111688_0s.gif)
Android实现扫一扫识别数字功能
2021-09-27 09:30:57
![](https://img.aspxhome.com/file/2023/3/139563_0s.jpg)
编写Java代码对HDFS进行增删改查操作代码实例
2023-07-08 11:46:42
SpringBoot快速配置数据源的方法
2023-07-28 13:22:42
c++难以发现的bug(有趣)
2022-01-27 17:01:41