java递归把list菜单列表转为菜单树

java递归把列表转为菜单树

菜单实体类

package com.utils.menu;

import java.util.List;

public class Menu {

	private String name;
	private String icon;
	private String id;
	private String isLeaf; //1:目录      0:叶子
	private String parentId;
	private List<Menu> children;
	
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getIcon() {
		return icon;
	}
	public void setIcon(String icon) {
		this.icon = icon;
	}
	public String getId() {
		return id;
	}
	public void setId(String id) {
		this.id = id;
	}
	public String getIsLeaf() {
		return isLeaf;
	}
	public void setIsLeaf(String isLeaf) {
		this.isLeaf = isLeaf;
	}
	public String getParentId() {
		return parentId;
	}
	public void setParentId(String parentId) {
		this.parentId = parentId;
	}
	public List<Menu> getChildren() {
		return children;
	}
	public void setChildren(List<Menu> children) {
		this.children = children;
	}
	@Override
	public String toString() {
		return "Menu [name=" + name + ", icon=" + icon + ", id=" + id + ", isLeaf=" + isLeaf + ", parentId=" + parentId
				+ ", children=" + children + "]";
	}
	
}

菜单树工具类

package com.utils.menu;

import java.util.ArrayList;
import java.util.List;

/**
 * 菜单树工具类
 *项目名称:text   
 * 类名称:MenuTreeUtil   
 * 类描述:   把菜单列表转换为树形结构
 * @version
 */
public class MenuTreeUtil {
	
	/**
	 * 递归给父节点找孩子节点
	 * @param list 目录list
	 * @param root 父节点id
	 * @return 该父节点id下的所有子节点list集合
	 */
	public List<Menu> findChildren(List<Menu> list,String root){
		List<Menu> children = new ArrayList<Menu>();
		//1、遍历list,给root找孩子
		for(Menu menu : list) {
			//2、判断父节点是否为root
			if(root.equals(menu.getParentId())) {
				children.add(menu);
			}
		}
		//3、遍历孩子节点list,判断子节点是否有目录节点,有则需要递归找孩子
		for(Menu menu : children) {
			//4、判断是否为目录,是则递归,给该节点找孩子
			if("1".equals(menu.getIsLeaf())) {
				menu.setChildren(findChildren(list,menu.getId()));
			}
		}
		return children;
	}
}

调用

package com.utils.menu;

import java.util.List;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;

public class MenuTreeTest {

	public static void main(String[] args) {

		String menuListStr = "[{\"id\":1,\"name\":\"一级菜单\",\"icon\":\"icon1\",\"parentId\":\"0\",\"isLeaf\":\"1\"},{\"id\":2,\"name\":\"二级菜单\",\"icon\":\"icon1\",\"parentId\":\"0\",\"isLeaf\":\"1\"},{\"id\":3,\"name\":\"三级菜单\",\"icon\":\"icon1\",\"parentId\":\"0\",\"isLeaf\":\"1\"},{\"id\":4,\"name\":\"四级菜单\",\"icon\":\"icon1\",\"parentId\":\"0\",\"isLeaf\":\"1\"},{\"id\":5,\"name\":\"一级子菜单\",\"icon\":\"icon1\",\"parentId\":\"1\",\"isLeaf\":\"0\"},{\"id\":6,\"name\":\"一级子菜单\",\"icon\":\"icon1\",\"parentId\":\"1\",\"isLeaf\":\"1\"},{\"id\":7,\"name\":\"二级子菜单\",\"icon\":\"icon1\",\"parentId\":\"2\",\"isLeaf\":\"0\"},{\"id\":8,\"name\":\"三级子菜单\",\"icon\":\"icon1\",\"parentId\":\"3\",\"isLeaf\":\"0\"},{\"id\":9,\"name\":\"一级孙子菜单\",\"icon\":\"icon1\",\"parentId\":\"6\",\"isLeaf\":\"0\"}]";
		System.out.println(menuListStr.replace("\\", ""));
		
		List<Menu> list = JSONArray.parseArray(menuListStr, Menu.class);
		
		MenuTreeUtil menuTeeeUtil = new MenuTreeUtil();
		List<Menu> result = menuTeeeUtil.findChildren(list,"0");
		System.out.println(result);
		
		String resultStr = JSON.toJSONString(result);
		System.out.println(resultStr);
	}
}
待转的list集合 json格式
[
  {
    "id": 1,
    "name": "一级菜单",
    "icon": "icon1",
    "parentId": "0",
    "isLeaf": "1"
  },
  {
    "id": 2,
    "name": "二级菜单",
    "icon": "icon1",
    "parentId": "0",
    "isLeaf": "1"
  },
  {
    "id": 3,
    "name": "三级菜单",
    "icon": "icon1",
    "parentId": "0",
    "isLeaf": "1"
  },
  {
    "id": 4,
    "name": "四级菜单",
    "icon": "icon1",
    "parentId": "0",
    "isLeaf": "1"
  },
  {
    "id": 5,
    "name": "一级子菜单",
    "icon": "icon1",
    "parentId": "1",
    "isLeaf": "0"
  },
  {
    "id": 6,
    "name": "一级子菜单",
    "icon": "icon1",
    "parentId": "1",
    "isLeaf": "1"
  },
  {
    "id": 7,
    "name": "二级子菜单",
    "icon": "icon1",
    "parentId": "2",
    "isLeaf": "0"
  },
  {
    "id": 8,
    "name": "三级子菜单",
    "icon": "icon1",
    "parentId": "3",
    "isLeaf": "0"
  },
  {
    "id": 9,
    "name": "一级孙子菜单",
    "icon": "icon1",
    "parentId": "6",
    "isLeaf": "0"
  }
]
转化过的树形list json格式
[
  {
    "children": [
      {
        "icon": "icon1",
        "id": "5",
        "isLeaf": "0",
        "name": "一级子菜单",
        "parentId": "1"
      },
      {
        "children": [
          {
            "icon": "icon1",
            "id": "9",
            "isLeaf": "0",
            "name": "一级孙子菜单",
            "parentId": "6"
          }
        ],
        "icon": "icon1",
        "id": "6",
        "isLeaf": "1",
        "name": "一级子菜单",
        "parentId": "1"
      }
    ],
    "icon": "icon1",
    "id": "1",
    "isLeaf": "1",
    "name": "一级菜单",
    "parentId": "0"
  },
  {
    "children": [
      {
        "icon": "icon1",
        "id": "7",
        "isLeaf": "0",
        "name": "二级子菜单",
        "parentId": "2"
      }
    ],
    "icon": "icon1",
    "id": "2",
    "isLeaf": "1",
    "name": "二级菜单",
    "parentId": "0"
  },
  {
    "children": [
      {
        "icon": "icon1",
        "id": "8",
        "isLeaf": "0",
        "name": "三级子菜单",
        "parentId": "3"
      }
    ],
    "icon": "icon1",
    "id": "3",
    "isLeaf": "1",
    "name": "三级菜单",
    "parentId": "0"
  },
  {
    "children": [],
    "icon": "icon1",
    "id": "4",
    "isLeaf": "1",
    "name": "四级菜单",
    "parentId": "0"
  }
]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

成年人的苦衷

你的鼓励是我最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值