中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

用JAVA寫無限級樹形菜單代碼

發布時間:2021-06-25 09:56:35 來源:億速云 閱讀:175 作者:chen 欄目:大數據

這篇文章主要介紹“用JAVA寫無限級樹形菜單代碼 ”,在日常操作中,相信很多人在用JAVA寫無限級樹形菜單代碼 問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”用JAVA寫無限級樹形菜單代碼 ”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!

由于工作中經常碰見樹形結構所寫的一個公用方法,雖然之前有過無限級的代碼不過都限制于對象,對象不同或對象中字段不同都無法使用。

此方法可以接受任意類型的List集合,返回時是已經拼接好了所有子集的List集合。注意方法接收的List合返回的List是同一個對象。

此方法采用的是Map形式實現,所以在參數方面需要提供字段名,這樣就可以避免父級和自己字段不同從而多寫很多重復的代碼。另外子集的名稱是可以自定義的。如果名字和我重構方法中相同可以用重構方法(其實這個沒啥用就是可能方便一點)

自己寫的大佬勿噴,如果有更好的方式可以評論,感謝大家!

private static List<Map<String,Object>> all;

/**
 *
 * @param list 任何類型的list集合
 * @param id 本層的id的字段名
 * @param parentId 上一層Id的字段名
 * @param childrenListName 對象中子集的名
 * @param firstId 最高層的父級Id
 * @return 返回任意類型List
 * @throws Exception 轉換異常
 */
public static List<T> toJson(List<?> list, String id, String parentId, String childrenListName,Integer firstId) throws Exception {
    List<Map<String,Object>> mapList = new ArrayList<>();
    for(Object o : list){
        Map<String,Object> map = ObjectToMapUtils.objectToMap(o);
        mapList.add(map);
    }
    all = new ArrayList<>(mapList);
    List<Map<String,Object>> root = new ArrayList<>();
    for(Map<String,Object> map : mapList){
        if(Integer.parseInt(map.get(parentId).toString()) == firstId){
            root.add(map);
        }
    }
    all.removeAll(root);

    for(Map<String,Object> map : root){
        map.put(childrenListName,getChildren(map,id,parentId,childrenListName));
    }
    Gson gson = new Gson();
    List<T> lists = gson.fromJson(JSONObject.toJSONString(root),list.getClass());
    return lists;
}
public static List<T> toJson(List<?> list) throws Exception{
    return toJson(list,"id","parentId","list",-1);
}
public static List<T> toJson(List<?> list,String id) throws Exception{
    return toJson(list,id,"parentId","list",-1);
}
public static List<T> toJson(List<?> list,String id,String parentId) throws Exception{
    return toJson(list,id,parentId,"list",-1);
}
public static List<T> toJson(List<?> list,String id,String parentId,String childrenListName) throws Exception{
    return toJson(list,id,parentId,childrenListName,-1);
}

public static List<Map<String,Object>> getChildren(Map<String,Object> parent,String id,String parentId,String childrenListName){
    List<Map<String,Object>> mapList;
    if(parent.containsKey(childrenListName) && parent.get(childrenListName) != null){
        mapList = (List<Map<String, Object>>) parent.get(childrenListName);
    }else{
        mapList = new ArrayList<>();
    }
    for(Map<String,Object> map : all){
        if(Integer.parseInt(parent.get(id).toString()) == Integer.parseInt(map.get(parentId).toString())){
            mapList.add(map);
        }
    }

    if(mapList != null){
        all.removeAll(mapList);
        for(Map<String,Object> map : mapList){ 
            map.put(childrenListName,getChildren(map,id,parentId,childrenListName)); 
        }
    }
    return mapList;
}

public static void main(String[] arg){
    List<T> list = new ArrayList<>();
    try{
        TreeUtils.toJson(list,"id","parentId","list",0);
    }catch (Exception e){

    }
}

到此,關于“用JAVA寫無限級樹形菜單代碼 ”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

大悟县| 关岭| 广丰县| 宜章县| 瑞丽市| 上杭县| 郑州市| 平阳县| 本溪| 玉树县| 许昌市| 宣城市| 磐安县| 托克逊县| 松溪县| 九寨沟县| 通许县| 玛沁县| 林口县| 洛川县| 和政县| 石狮市| 蚌埠市| 大同县| 和林格尔县| 莆田市| 开远市| 普宁市| 阜城县| 大化| 乌苏市| 峨山| 台山市| 通辽市| 太白县| 周宁县| 南开区| 茶陵县| 门源| 内江市| 柘城县|