package com.example.demo.entity;
import lombok.Data;
import java.util.List;
/**
* @description:
* @author: leiqinghua
* @create: 2022-11-23 16:38
* @Version 1.0
**/
@Data
public class tree1 {
private String id;
private String name;
private String pid;
private List<tree1> childTree1;
}
package com.example.demo;
import com.example.demo.entity.tree1;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import org.junit.jupiter.api.Test;
import org.junit.platform.commons.util.StringUtils;
import org.springframework.boot.test.context.SpringBootTest;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@SpringBootTest
class DemolistnerApplicationTests {
private final Gson gson = new GsonBuilder().disableHtmlEscaping().create();
@Test
void contextLoads() {
ArrayList<tree1> tree1s = new ArrayList<>();
tree1 tree1 = new tree1();
tree1.setId("1");
tree1.setName("中国");
tree1.setPid(null);
tree1s.add(tree1);
tree1 tree2 = new tree1();
tree2.setId("2");
tree2.setName("福建");
tree2.setPid("1");
tree1s.add(tree2);
tree1 tree3 = new tree1();
tree3.setId("3");
tree3.setName("广东");
tree3.setPid("1");
tree1s.add(tree3);
tree1 tree4 = new tree1();
tree4.setId("4");
tree4.setName("福州");
tree4.setPid("2");
tree1s.add(tree4);
tree1 tree5 = new tree1();
tree5.setId("5");
tree5.setName("宁德");
tree5.setPid("2");
tree1s.add(tree5);
tree1 tree6 = new tree1();
tree6.setId("6");
tree6.setName("佛山");
tree6.setPid("3");
tree1s.add(tree6);
tree1 tree7 = new tree1();
tree7.setId("7");
tree7.setName("深圳");
tree7.setPid("3");
tree1s.add(tree7);
tree1s.forEach(l ->{
System.out.println(l);
});
// 最后的结果
List<tree1> menuList = new ArrayList<tree1>();
// 先找到所有的一级菜单
for (int i = 0; i < tree1s.size(); i++) {
// 一级菜单没有parentId
if (StringUtils.isBlank(tree1s.get(i).getPid())) {
menuList.add(tree1s.get(i));
}
}
// 为一级菜单设置子菜单,getChild是递归调用的
for (tree1 menu : menuList) {
menu.setChildTree1(getChild(menu.getId(), tree1s));
}
Map<String,Object> jsonMap = new HashMap<>();
jsonMap.put("menu", menuList);
System.out.println(gson.toJson(jsonMap));
}
/**
* 递归查找子菜单
*
* @param id
* 当前菜单id
* @param rootMenu
* 要查找的列表
* @return
*/
private List<tree1> getChild(String id, List<tree1> rootMenu) {
// 子菜单
List<tree1> childList = new ArrayList<>();
for (tree1 menu : rootMenu) {
// 遍历所有节点,将父菜单id与传过来的id比较
if (StringUtils.isNotBlank(menu.getPid())) {
if (menu.getPid().equals(id)) {
childList.add(menu);
}
}
}
// 把子菜单的子菜单再循环一遍
for (tree1 menu : childList) {// 没有url子菜单还有子菜单
if (StringUtils.isNotBlank(menu.getPid())) {
// 递归
menu.setChildTree1(getChild(menu.getId(), rootMenu));
}
} // 递归退出条件
if (childList.size() == 0) {
return null;
}
return childList;
}
}