日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

java递归生成无限层级的树--分类管理

發布時間:2023/12/10 编程问答 20 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java递归生成无限层级的树--分类管理 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

首先需要父子關系,帖代碼

package com.zhizhuo.zcms.domain; import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableId; import java.io.Serializable; import java.time.LocalDateTime; import lombok.Data; import lombok.EqualsAndHashCode; import lombok.experimental.Accessors; /*** @author zhizhuo-1543057945* @since 2019-08-14*/ @Data @Accessors(chain = true) public class Category implements Serializable {private static final long serialVersionUID = 1L;/*** 分類id*/@TableId(value = "cate_id", type = IdType.AUTO)private Integer cateId;/*** 分類名*/private String cateName;/*** 英文名*/private String cateEn;/*** 分類添加時間*/private LocalDateTime cateAddTime;/*** 分類修改時間*/private LocalDateTime cateUpdateTime;/*** 父id*/private Integer catePid;/*** 分類排序*/private Integer cateSort;/*** 分類狀態,0開啟,1關閉,2為已刪除*/private Integer cateStatus;/*** 分類下的標題-網站標題*/private String cateTitle;/*** 分類下的網站關鍵詞*/private String cateKey;/*** 分類下的網站描述*/private String cateDes; }

接下來我們創建一個樹結構treeUtil

package com.zhizhuo.zcms.utils; import lombok.*; import java.util.List;/*** 〈一句話功能簡述〉<br> * 生成樹* @author 1543057945* @create 2019/8/17* @since 1.0.0*/ @Data @ToString @Builder(toBuilder = true) @AllArgsConstructor @NoArgsConstructor @EqualsAndHashCode public class TreeUtil<T> {/*** 當前節點*/private T currNode;/*** 孩子*/private List<TreeUtil<T>> childs; }

說一下currNode他是當前節點,因為他是泛型定義,需要我們傳入對象類型才可以,應該會想到是上面那個category類,沒錯就是的,childs只是個TreeUtil的集合,因為currNode節點下不止一個呢,所以要定義集合,可能會問為什么不是category的集合,如果是的話就會出現問題,

接下來看,我們實際操作
在項目中我做了排序,貼上排序代碼,使用lambda表達式寫的,應該看得懂

/*** 排序* @return*/private Comparator<TreeUtil<Category>> sort(){return (o, o1)->o.getCurrNode().getCateSort()-o1.getCurrNode().getCateSort();}

先說下真正的需求,我要得到指定分類id下面的全部集合,也就是動態樹
那么我們需要傳入一個id

/*** 生成樹* @return*/@Overridepublic List<TreeUtil<Category>> getCateTreeById(Integer id) {//先得到所有的節點List<Category> categoryList = selectAll();//把查詢到的變成樹ArrayList<TreeUtil<Category>> treeUtils = new ArrayList<>();//排序Collections.sort(treeUtils,sort());for (Category category1 : categoryList) {treeUtils.add(new TreeUtil<Category>().toBuilder().currNode(category1).build());}//返回該結果的所有樹return getChild(treeUtils, id);}

核心遞歸代碼

/**** @param treeUtilList* @param id* @return*/@SuppressWarnings("ALL")private List<TreeUtil<Category>> getChild(List<TreeUtil<Category>> treeUtilList, Integer id) {//裝入子樹ArrayList<TreeUtil<Category>> childs = new ArrayList<>();//查找id的子樹for (TreeUtil<Category> treeUtil : treeUtilList) {if (treeUtil.getCurrNode().getCatePid().equals(id)){childs.add(treeUtil);}}//排序Collections.sort(childs,sort());//遍歷子樹,并查找下一級子樹for (TreeUtil<Category> child : childs) {child.setChilds(getChild(treeUtilList,child.getCurrNode().getCateId()));}/*//結束條件if (childs.size()==0){return new ArrayList<>();}*/return childs;}

這樣我們就得到了樹,順便貼一張圖

總結

以上是生活随笔為你收集整理的java递归生成无限层级的树--分类管理的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。