java已知父子关系构建组织菜单层级或者树状结构简单for代码实现
事情是这样的:看到相关技术推文感觉不符合实际而写。
推文地址:https://mp.weixin.qq.com/s/bgdjnFPKkKqOyKx20oSFgQ
for循环版:
import com.alibaba.fastjson.JSON;
import lombok.Data;
import org.junit.Test;
import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
public class hisTest {
@Data
public class Menu {
/**
* id
*/
public Integer id;
/**
* 名称
*/
public String name;
/**
* 父id ,根节点为0
*/
public Integer parentId;
/**
* 子节点信息
*/
public List<Menu> childList;
public Menu(Integer id, String name, Integer parentId) {
this.id = id;
this.name = name;
this.parentId = parentId;
}
}
@Test
public void treeHandle() {
//模拟从数据库一次性查询出所有组织菜单或者层级数据等
List<Menu> menus = new ArrayList<>();
menus.add(new Menu(1, "根节点", 0));
menus.add(new Menu(2, "子节点1", 1));
menus.add(new Menu(3, "子节点1.1", 2));
menus.add(new Menu(4, "子节点1.2", 2));
menus.add(new Menu(5, "根节点1.3", 2));
menus.add(new Menu(6, "根节点2", 1));
menus.add(new Menu(7, "根节点2.1", 6));
menus.add(new Menu(8, "根节点2.2", 6));
menus.add(new Menu(9, "根节点2.2.1", 7));
menus.add(new Menu(10, "根节点2.2.2", 7));
menus.add(new Menu(11, "根节点3", 1));
menus.add(new Menu(12, "根节点3.1", 11));
//临时存储子节点数据
List<Menu> temp = new ArrayList<>();
for (Menu menu : menus) {
//子节点数据
List<Menu> childList = new ArrayList<>();
for (Menu childMenu : menus) {
if (Objects.equals(menu.id, childMenu.getParentId())) {
childList.add(childMenu);
temp.add(childMenu);
}
}
menu.setChildList(childList);
}
//原数据集合移除子节点
if (temp.size() > 0) {
menus.removeAll(temp);
}
System.out.println("-------转json输出结果-------");
System.out.println(JSON.toJSON(menus));
}
}
结果:
[{
"name": "根节点",
"childList": [{
"name": "子节点1",
"childList": [{
"name": "子节点1.1",
"childList": [],
"id": 3,
"parentId": 2
}, {
"name": "子节点1.2",
"childList": [],
"id": 4,
"parentId": 2
}, {
"name": "根节点1.3",
"childList": [],
"id": 5,
"parentId": 2
}],
"id": 2,
"parentId": 1
}, {
"name": "根节点2",
"childList": [{
"name": "根节点2.1",
"childList": [{
"name": "根节点2.2.1",
"childList": [],
"id": 9,
"parentId": 7
}, {
"name": "根节点2.2.2",
"childList": [],
"id": 10,
"parentId": 7
}],
"id": 7,
"parentId": 6
}, {
"name": "根节点2.2",
"childList": [],
"id": 8,
"parentId": 6
}],
"id": 6,
"parentId": 1
}, {
"name": "根节点3",
"childList": [{
"name": "根节点3.1",
"childList": [],
"id": 12,
"parentId": 11
}],
"id": 11,
"parentId": 1
}],
"id": 1,
"parentId": 0
}]