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


package tree;
 
import java.util.List;
 
/**
 * 
 * @author cenguocheng
 * [email protected]
 *    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

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 getChildMenus() {
        return childMenus;
    }
    public void setChildMenus(List 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
 * [email protected]
 *    2018-7-24
 */
public class TestTree {
    
    /**
     * 初始化数据
     * @return
     */
    public static List initData(){
        List treeData = new ArrayList();
        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 getChild(String id, List rootMenu) {
        // 子菜单
        List 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 treeData = initData(); // 原始数据
        
        // 查看结果
        for (Menu menu : treeData) {
          //System.out.println(menu.toString());
        }
        
        List menuList = new ArrayList(); // 树递归
        
        // 先找到所有的一级菜单
        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 jsonMap = new HashMap();
        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 arr){
        
        for(int i=0;i             str += "
  • ";
                str += "" +
                            ""+arr.get(i).getName()+"" +
                            ""+arr.get(i).getIcon()+"" +
                            "
    ";
                //存在子菜单 递归
                if(arr.get(i).getChildMenus() != null && arr.get(i).getChildMenus().size() > 0){
                    str += "
      ";
                      buildMenu(arr.get(i).getChildMenus()); // 递归
                      str += "
    ";
                }
                str += "
  • ";
            }
            
            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"
        }
      ]
    }
     
     

    你可能感兴趣的:(java)