多级菜单JSON

多级菜单JSON

 

Bean:

public class MenuBean implements java.io.Serializable {

    private static final long serialVersionUID = 1L;

    private String menuId;// 菜单ID

    private String pid;// 父节点

    private String menuName;// 菜单名称

    private String url;// URL地址

    private List<MenuBean> childs;//子菜单

     //还有些字段略

    // set,get

}

 

递归函数:

    private static List<MenuBean> handleSubMenu(List<MenuBean> menulist, String id) {

       List<MenuBean> rtnlist=new ArrayList<MenuBean>();

       for (MenuBean mBean : menulist) {

           if (id!=null&&mBean.getPid() != null && mBean.getPid().equalsIgnoreCase(id)) {

              MenuBean menu = new MenuBean();

              menu.setMenuId(mBean.getMenuId());

              menu.setPid(mBean.getPid());

              menu.setMenuName(mBean.getMenuName());

              List list=menu.getChilds();

              if(list==null){

                  list=new ArrayList();

              }

              list.add(handleSubMenu(menulist,mBean.getMenuId()));

              menu.setChilds(list);

              rtnlist.add(menu);

           }

       }

       return rtnlist;

    }

 

最项层菜单处理:

       //生成递归菜单

           Map<String, List> result=new HashMap<String, List>();;

           for(Map.Entry <String, List<MenuBean>> m:menuMap.entrySet()){//按组取出来要生成的递归菜单

              String key=m.getKey();

              List<MenuBean> list=m.getValue();

              List<MenuBean> rtnList=new ArrayList<MenuBean>();//顶级菜单个数(按组)

              for(MenuBean bean:list){//按组生成递归菜单

                  if(!StringUtils.hasLength(bean.getPid())){    //如果是顶级菜单

                     bean.setChilds(handleSubMenu(list,bean.getMenuId()));//递归生成子菜单

                     rtnList.add(bean);

                  }

              }

              result.put(key,rtnList);

           }

 

测试代码:

    public static void main(String[] args) {

       List<MenuBean> list = new ArrayList<MenuBean>();

       list.add(new MenuBean("1",null,"A"));        

       list.add(new MenuBean("2",null,"B"));

       list.add(new MenuBean("3","1","A1"));

       list.add(new MenuBean("4","1","A2"));

       list.add(new MenuBean("5","2","B1"));

       list.add(new MenuBean("8","2","B2"));

       list.add(new MenuBean("6","5","B11"));

       list.add(new MenuBean("7","6","B111"));

       List vlist=handleSubMenu(list,"2");

       System.out.println(JSONArray.fromObject(vlist));

    }

输出:

[{"childs":[[{"childs":[[{"childs":[[]],"groupId":0,"menuId":"7","menuName":"B111","modeType":0,"order":0,"pid":"6","url":""}]],"groupId":0,"menuId":"6","menuName":"B11","modeType":0,"order":0,"pid":"5","url":""}]],"groupId":0,"menuId":"5","menuName":"B1","modeType":0,"order":0,"pid":"2","url":""},{"childs":[[]],"groupId":0,"menuId":"8","menuName":"B2","modeType":0,"order":0,"pid":"2","url":""}]

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值