获取菜单树中每一个节点的菜单路径

2017-08-30 15:06:58   作者:MangoCool   来源:MangoCool

为了方便浏览,代码做了很多简化,直接贴代码:

package com.mangocool.test;

import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import net.sf.json.JSONArray;
import net.sf.json.JsonConfig;

public class MenuPathTest {
	
	/**
	 * 拼接菜单路径
	 * @param menuStr
	 * @return
	 */
	public static String menuPath(String menuStr) {
		
		List<HashMap<String, Object>> newlist = new ArrayList<HashMap<String, Object>>();
		List<HashMap<String, Object>> list = json2List(menuStr);
		// 全部增加一个menuPath列,后续用到
		for (int i=0; i<list.size(); i++) {
			list.get(i).put("menuPath", list.get(i).get("menuName"));
			// 默认实际它有父节点。但也有异常情况,比如:虽然有parentId,但后来删除了它的父菜单
			list.get(i).put("hasParent", "1");
		}
		
		for (int i=0; i<list.size(); i++) {
			newlist.add(recursionMenu(list.get(i), list));
		}
		return JSONArray.fromObject(newlist).toString();
	}
	
	public static HashMap<String, Object> recursionMenu(HashMap<String, Object> targetMap, List<HashMap<String, Object>> srclist) {
		
		if("null".equals(targetMap.get("parentId")+"")) {
			return targetMap;
			
		} else {
			for(HashMap<String, Object> srcMap: srclist) {
				if((targetMap.get("parentId")+"").equals(srcMap.get("id")+"")) {
					targetMap.put("hasParent", "1");
					targetMap.put("menuPath", srcMap.get("menuPath")+"/"+targetMap.get("menuPath"));
					targetMap.put("parentId", srcMap.get("parentId")+"");
					break;
				} else {
					// 没有父菜单,做标记
					targetMap.put("hasParent", "0");
				}
			}
			if("0".equals(targetMap.get("hasParent"))) {
				return targetMap;
			}
			return recursionMenu(targetMap, srclist);
		}
	}
	
	public static List<HashMap<String, Object>> json2List(String jsonStr)
    {
        List<HashMap<String, Object>> jsonList = new ArrayList<HashMap<String, Object>>();
        JSONArray jsonArray = JSONArray.fromObject(jsonStr);
        HashMap<String, Object> hashMap = new HashMap<String, Object>();
        JsonConfig jc = new JsonConfig();
        jc.setClassMap(hashMap);
        jc.setRootClass(Map.class);
        jc.setArrayMode(JsonConfig.MODE_LIST);
        Collection<HashMap<String, Object>> collection = JSONArray.toCollection(jsonArray, jc);
        if(collection instanceof List)
        {
            jsonList = (List<HashMap<String, Object>>)collection;
        }
        return jsonList;
    }
	
	public static void main(String[] args) {
		String jsonStr = "[{\"url\": \"www.tianxin.com\",\"menuName\": \"天心区\",\"id\": 1005164,\"parentId\": 1005216},{\"url\": \"www.yuhua.com\",\"menuName\": \"雨花区\",\"id\": 1005097,\"parentId\": 1005216},{\"url\": \"www.rurong.com\",\"menuName\": \"芙蓉区\",\"id\": 1005098,\"parentId\": 1005216},{\"url\": null,\"menuName\": \"武汉市\",\"id\": 1000042,\"parentId\": 1002508},{\"url\": \"www.wuchang.com\",\"menuName\": \"南昌市\",\"id\": 1005215,\"parentId\": 1002510},{\"url\": null,\"menuName\": \"新余市\",\"id\": 1000032,\"parentId\": 1002510},{\"url\": \"www.baidu.com\",\"menuName\": \"湘潭市\",\"id\": 1000033,\"parentId\": 1002509},{\"url\": \"www.baidu.com\",\"menuName\": \"株洲市\",\"id\": 1000034,\"parentId\": 1002509},{\"url\": null,\"menuName\": \"湖南省\",\"id\": 1002509,\"parentId\": 1000854},{\"url\": null,\"menuName\": \"湖北省\",\"id\": 1002508,\"parentId\": 1000854},{\"url\": null,\"menuName\": \"江西省\",\"id\": 1002510,\"parentId\": 1000854},{\"url\": \"www.baidu.com\",\"menuName\": \"长沙市\",\"id\": 1005216,\"parentId\": 1002509},{\"url\": null,\"menuName\": \"中国\",\"id\": 1000854,\"parentId\": null},{\"url\": null,\"menuName\": \"武昌区\",\"id\": 1014581,\"parentId\": 1000042},{\"url\": \"www.baidu.com\",\"menuName\": \"汉阳区\",\"id\": 1014580,\"parentId\": 1000042}]";
		System.out.println(menuPath(jsonStr));
	}

}

最终的结果:

[{
	"id": 1005164,
	"parentId": null,
	"hasParent": "1",
	"menuPath": "中国/湖南省/长沙市/天心区",
	"url": "www.tianxin.com",
	"menuName": "天心区"
},
{
	"id": 1005097,
	"parentId": null,
	"hasParent": "1",
	"menuPath": "中国/湖南省/长沙市/雨花区",
	"url": "www.yuhua.com",
	"menuName": "雨花区"
},
{
	"id": 1005098,
	"parentId": null,
	"hasParent": "1",
	"menuPath": "中国/湖南省/长沙市/芙蓉区",
	"url": "www.rurong.com",
	"menuName": "芙蓉区"
},
{
	"id": 1000042,
	"parentId": null,
	"hasParent": "1",
	"menuPath": "中国/湖北省/武汉市",
	"url": null,
	"menuName": "武汉市"
},
{
	"id": 1005215,
	"parentId": null,
	"hasParent": "1",
	"menuPath": "中国/江西省/南昌市",
	"url": "www.wuchang.com",
	"menuName": "南昌市"
},
{
	"id": 1000032,
	"parentId": null,
	"hasParent": "1",
	"menuPath": "中国/江西省/新余市",
	"url": null,
	"menuName": "新余市"
},
{
	"id": 1000033,
	"parentId": null,
	"hasParent": "1",
	"menuPath": "中国/湖南省/湘潭市",
	"url": "www.baidu.com",
	"menuName": "湘潭市"
},
{
	"id": 1000034,
	"parentId": null,
	"hasParent": "1",
	"menuPath": "中国/湖南省/株洲市",
	"url": "www.baidu.com",
	"menuName": "株洲市"
},
{
	"id": 1002509,
	"parentId": null,
	"hasParent": "1",
	"menuPath": "中国/湖南省",
	"url": null,
	"menuName": "湖南省"
},
{
	"id": 1002508,
	"parentId": null,
	"hasParent": "1",
	"menuPath": "中国/湖北省",
	"url": null,
	"menuName": "湖北省"
},
{
	"id": 1002510,
	"parentId": null,
	"hasParent": "1",
	"menuPath": "中国/江西省",
	"url": null,
	"menuName": "江西省"
},
{
	"id": 1005216,
	"parentId": null,
	"hasParent": "1",
	"menuPath": "中国/湖南省/长沙市",
	"url": "www.baidu.com",
	"menuName": "长沙市"
},
{
	"id": 1000854,
	"parentId": null,
	"hasParent": "1",
	"menuPath": "中国",
	"url": null,
	"menuName": "中国"
},
{
	"id": 1014581,
	"parentId": null,
	"hasParent": "1",
	"menuPath": "中国/湖北省/武汉市/武昌区",
	"url": null,
	"menuName": "武昌区"
},
{
	"id": 1014580,
	"parentId": null,
	"hasParent": "1",
	"menuPath": "中国/湖北省/武汉市/汉阳区",
	"url": "www.baidu.com",
	"menuName": "汉阳区"
}]

欢迎分享你的。

标签: java 菜单路径 demo

分享:

关于我

一个喜欢唱歌,热衷旅行,爱好电子产品的码农。没事,跟三五好友吼上几嗓子,约上几个背着行囊去露营或者宅在家里抱着孩子敲代码。

座右铭:当你的才华还撑不起你的野心的时候,你就应该静下心来学习,永不止步!

            人生之旅历途甚长,所争决不在一年半月,万不可因此着急失望,招精神之萎葸。


Copyright 芒果酷(mangocool.com) All rights reserved. 湘ICP备14019394号

免责声明:本网站部分文章转载其他媒体,意在为公众提供免费服务。如有信息侵犯了您的权益,可与本网站联系,本网站将尽快予以撤除。