JAVA 树形子父级菜单递归 JSON 格式


package tree;
 
import java.util.List;
 
/**
 * 
 * @author cenguocheng
 * 137544496@qq.com
 *    2018-7-24
 */
public class Menu {
    // 菜单id
    private String id;
    // 菜单名称
    private String name;
    // 父菜单id
    private String parentId;
    // 菜单url
    private String url;
    // 菜单图标
    private String icon;
    // 菜单顺序
    private int order;
    // 子菜单
    private List<Menu> childMenus;
    
    public Menu(String id, String name, String parentId) {
        super();
        this.id = id;
        this.name = name;
        this.parentId = parentId;
    }
    
    @Override
    public String toString() {
        return "Menu [id=" + id + ", name=" + name + ", parentId=" + parentId
                + ", url=" + url + ", icon=" + icon + ", order=" + order
                + ", childMenus=" + childMenus + "]";
    }
 
    public String getId() {
        return id;
    }
    public void setId(String id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getParentId() {
        return parentId;
    }
    public void setParentId(String parentId) {
        this.parentId = parentId;
    }
    public String getUrl() {
        return url;
    }
    public void setUrl(String url) {
        this.url = url;
    }
    public String getIcon() {
        return icon;
    }
    public void setIcon(String icon) {
        this.icon = icon;
    }
    public int getOrder() {
        return order;
    }
    public void setOrder(int order) {
        this.order = order;
    }
    public List<Menu> getChildMenus() {
        return childMenus;
    }
    public void setChildMenus(List<Menu> childMenus) {
        this.childMenus = childMenus;
    }
    
}
package tree;
 
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
 
import com.alibaba.fastjson.JSON;
/**
 * 
 * @author cenguocheng
 * 137544496@qq.com
 *    2018-7-24
 */
public class TestTree {
    
    /**
     * 初始化数据
     * @return
     */
    public static List<Menu> initData(){
        List<Menu> treeData = new ArrayList<Menu>();
        treeData.add(new Menu("1","1","0"));
        treeData.add(new Menu("2","2","1"));
        treeData.add(new Menu("3","3","1"));
        treeData.add(new Menu("4","4","2"));
        treeData.add(new Menu("5","5","0"));
        treeData.add(new Menu("6","6","2"));
        treeData.add(new Menu("7","7","2"));
        treeData.add(new Menu("8","8","3"));
        treeData.add(new Menu("9","9","10"));
        treeData.add(new Menu("10","10","6"));
        treeData.add(new Menu("11","11","7"));
        return treeData;
    }
    
    /**
     * 子菜单递归
     * @param id
     * @param rootMenu
     * @return
     */
    private static List<Menu> getChild(String id, List<Menu> rootMenu) {
        // 子菜单
        List<Menu> childList = new ArrayList<>();
        for (Menu menu : rootMenu) {
            // 遍历所有节点,将父菜单id与传过来的id比较
            if (menu.getParentId().equals(id)) {
                childList.add(menu);
            }
        }
        
        // 把子菜单的子菜单再循环一遍
        for (Menu menu : childList) {
            menu.setChildMenus(getChild(menu.getId(), rootMenu));// 递归
        } 
        
        // 判断递归结束
        if (childList.size() == 0) {
            return null;
        }
        return childList;
    }
 
    /**
     * @param args
     */
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        List<Menu> treeData = initData(); // 原始数据
        
        // 查看结果
        for (Menu menu : treeData) {
          //System.out.println(menu.toString());
        }
        
        List<Menu> menuList = new ArrayList<Menu>(); // 树递归
        
        // 先找到所有的一级菜单
        for (int i = 0; i < treeData.size(); i++) {
            // 一级菜单父ID为0
            if (treeData.get(i).getParentId().equals("0")) {
                menuList.add(treeData.get(i));
            }
        }
        
        // 为一级菜单设置子菜单,getChild是递归调用的
        for (Menu menu : menuList) {
            menu.setChildMenus(getChild(menu.getId(), treeData));
        }
        
        Map<String,Object> jsonMap = new HashMap<String,Object>();
        jsonMap.put("menu", menuList);
        System.out.println(JSON.toJSONString(jsonMap));
        
        buildMenu(menuList);
        System.out.println(str);
    }
    
    
    /**
     * 遍历菜单
     * @param arr
     * @return
     */
    public static String str = "";
    public static String buildMenu(List<Menu> arr){
        
        for(int i=0;i<arr.size();i++){
            str += "<li>";
            str += "<a href='javascript:;'>" +
                        "<cite>"+arr.get(i).getName()+"</cite>" +
                        "<i class='iconfont nav_right'>"+arr.get(i).getIcon()+"</i>" +
                        "</a>";
            //存在子菜单 递归
            if(arr.get(i).getChildMenus() != null && arr.get(i).getChildMenus().size() > 0){
                str += "<ul>";
                buildMenu(arr.get(i).getChildMenus()); // 递归
                str += "</ul>";
            }
            str += "</li>";
        }
        
        return str;
    }
    
    
}
运行结果:

{
  "menu": [
    {
      "childMenus": [
        {
          "childMenus": [
            {
              "id": "4",
              "name": "4",
              "order": 0,
              "parentId": "2"
            },
            {
              "childMenus": [
                {
                  "childMenus": [
                    {
                      "id": "9",
                      "name": "9",
                      "order": 0,
                      "parentId": "10"
                    }
                  ],
                  "id": "10",
                  "name": "10",
                  "order": 0,
                  "parentId": "6"
                }
              ],
              "id": "6",
              "name": "6",
              "order": 0,
              "parentId": "2"
            },
            {
              "childMenus": [
                {
                  "id": "11",
                  "name": "11",
                  "order": 0,
                  "parentId": "7"
                }
              ],
              "id": "7",
              "name": "7",
              "order": 0,
              "parentId": "2"
            }
          ],
          "id": "2",
          "name": "2",
          "order": 0,
          "parentId": "1"
        },
        {
          "childMenus": [
            {
              "id": "8",
              "name": "8",
              "order": 0,
              "parentId": "3"
            }
          ],
          "id": "3",
          "name": "3",
          "order": 0,
          "parentId": "1"
        }
      ],
      "id": "1",
      "name": "1",
      "order": 0,
      "parentId": "0"
    },
    {
      "id": "5",
      "name": "5",
      "order": 0,
      "parentId": "0"
    }
  ]
}
 
 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值