您好,登錄后才能下訂單哦!
這篇文章主要介紹“用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寫無限級樹形菜單代碼 ”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。