转换前数据结构:
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/0ee472d05c3eb8d460c2ddda25c2827a.png)
转换后数据结构:
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/522dc981ae840d177d76f16ca705852b.png)
代码实现:
import com.fasterxml.jackson.annotation.JsonInclude;
import java.util.List;
public class Menu {
private String menuCode;
private String menuName;
private String parentMenuCode;
private String parentMenuName;
@JsonInclude(JsonInclude.Include.NON_NULL)
private List<Menu> childrenMenu;
public String getMenuCode() {
return menuCode;
}
public void setMenuCode(String menuCode) {
this.menuCode = menuCode;
}
public String getMenuName() {
return menuName;
}
public void setMenuName(String menuName) {
this.menuName = menuName;
}
public String getParentMenuCode() {
return parentMenuCode;
}
public void setParentMenuCode(String parentMenuCode) {
this.parentMenuCode = parentMenuCode;
}
public String getParentMenuName() {
return parentMenuName;
}
public void setParentMenuName(String parentMenuName) {
this.parentMenuName = parentMenuName;
}
public List<Menu> getChildrenMenu() {
return childrenMenu;
}
public void setChildrenMenu(List<Menu> childrenMenu) {
this.childrenMenu = childrenMenu;
}
@Override
public String toString() {
return "Menu{" +
"menuCode='" + menuCode + '\'' +
", menuName='" + menuName + '\'' +
", parentMenuCode='" + parentMenuCode + '\'' +
", parentMenuName='" + parentMenuName + '\'' +
", childrenMenu=" + childrenMenu +
'}';
}
}
import com.alibaba.fastjson.JSONObject;
import com.demo.service.pojo.Menu;
import org.apache.commons.lang.StringUtils;
import org.springframework.util.CollectionUtils;
import java.util.ArrayList;
import java.util.List;
public class TestDemo {
public static void main(String[] args) {
List<Menu> menuList = new ArrayList<>();
Menu m1 = new Menu();
m1.setParentMenuCode("0");
m1.setParentMenuName("根菜单");
m1.setMenuCode("01");
m1.setMenuName("角色管理");
Menu m2 = new Menu();
m2.setParentMenuCode("01");
m2.setParentMenuName("角色管理");
m2.setMenuCode("0101");
m2.setMenuName("角色添加");
Menu m3 = new Menu();
m3.setParentMenuCode("01");
m3.setParentMenuName("角色管理");
m3.setMenuCode("0102");
m3.setMenuName("角色删除");
Menu m4 = new Menu();
m4.setParentMenuCode("0");
m4.setParentMenuName("根菜单");
m4.setMenuCode("02");
m4.setMenuName("权限管理");
menuList.add(m1);
menuList.add(m2);
menuList.add(m3);
menuList.add(m4);
System.out.println("转换前:" + JSONObject.toJSONString(menuList));
menuList = handleMenu(menuList, "0");
System.out.println("转换后:" + JSONObject.toJSONString(menuList));
}
public static List<Menu> handleMenu(List<Menu> menuList, String rootMenuCode) {
if(CollectionUtils.isEmpty(menuList)) {
return new ArrayList<>();
}
List<Menu> menus = new ArrayList<>();
for (Menu menu : menuList) {
if (StringUtils.equals(menu.getParentMenuCode(), rootMenuCode)) {
menus.add(getChildMenu(menu, menuList));
}
}
return menus;
}
public static Menu getChildMenu(Menu menu, List<Menu> menuList) {
for (Menu m : menuList) {
if(StringUtils.equals(m.getParentMenuCode(), menu.getMenuCode())) {
if(null == menu.getChildrenMenu()) {
menu.setChildrenMenu(new ArrayList<>());
}
menu.getChildrenMenu().add(getChildMenu(m, menuList));
}
}
return menu;
}
}