<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
在日常一線開發過程中,總有列表轉樹的需求,幾乎是專案的標配,比方說做多級選單、多級目錄、多級分類等,有沒有一種通用且跨專案的解決方式呢?幫助廣大技術朋友給業務瘦身,提高開發效率。
本文將基於Java8的Lambda 表示式和Stream等知識,使用TreeUtils工具類實現一行程式碼完成列表轉樹這一通用型需求。本文有配套視訊,傳送門直達。
需要說明的是,本TreeUtils工具類已進行三版優化,能夠勝任生產場景絕大多數列表轉樹的。
本座標地址包含TreeUtils
工具類方法,已經發布到Maven中央倉庫,建議使用最新的版本號,本文釋出時版本是1.5.8.3
,若有最新版本,建議使用最新版本。
學習原始碼的朋友,原始碼直通車
<dependency> <groupId>xin.altitude.cms</groupId> <artifactId>ucode-cms-common</artifactId> <version>1.5.8.3</version> </dependency>
DO是存取資料庫實體類,屬於前期準備素材。
@Data @NoArgsConstructor @AllArgsConstructor @TableName(value = "bu_category3") public class Category { private static final long serialVersionUID = 1L; @TableId(type = IdType.AUTO) private String id; private String name; private String parentId; private String remark; @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") private LocalDateTime createTime; @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") private LocalDateTime updateTime; public Category(Category category) { if (Objects.nonNull(category)) { this.id = category.id; this.name = category.name; this.parentId = category.parentId; this.remark = category.remark; this.createTime = category.createTime; this.updateTime = category.updateTime; } } }
建立BO資料模型用於構造屬性結點
@Data @NoArgsConstructor public class CategoryBo { private String id; private String name; private String parentId; private String remark; /** * 孩子結點 名字任意取 */ private List<CategoryBo> childList; /** * 實現Category 轉 CategoryBo * * @param category */ public CategoryBo(Category category) { if (Objects.nonNull(category)) { this.id = category.getId(); this.name = category.getName(); this.parentId = category.getParentId(); this.remark = category.getRemark(); } } }
在服務層呼叫TreeUtils工具類,一行程式碼完成轉換。
/** * 獲取DO中指定的屬性 並構造成樹 * @return */ public List<CategoryBo> selectCategory4() { List<Category> categoryList = this.list(); List<CategoryBo> categoryBoList = EntityUtils.toList(categoryList, CategoryBo::new); return TreeUtils.createNodeDetail(categoryBoList, "000000", CategoryBo::getId, CategoryBo::getParentId, CategoryBo::getChildList); }
原始列表資料
{ "code": 200, "msg": "操作成功", "data": [ { "id": "310000", "name": "電子商務", "parentId": "000000", "remark": "EEEEE", "createTime": null, "updateTime": "2021-11-21 11:22:40" }, { "id": "310100", "name": "大宗商品", "parentId": "310000", "remark": "JJJJJ", "createTime": null, "updateTime": "2021-11-21 11:22:52" }, { "id": "310101", "name": "大宗商品綜合", "parentId": "310100", "remark": "IIIII", "createTime": null, "updateTime": "2021-11-21 11:22:58" }, { "id": "310102", "name": "鋼鐵類電商", "parentId": "310100", "remark": "OOOOO", "createTime": null, "updateTime": "2021-11-21 11:23:02" }, { "id": "310200", "name": "綜合電商", "parentId": "310000", "remark": "NNNNN", "createTime": null, "updateTime": "2021-11-21 11:23:07" } ] }
樹狀層次資料
{ "code": 200, "msg": "操作成功", "data": [ { "id": "310000", "name": "電子商務", "parentId": "000000", "remark": "EEEEE", "childList": [ { "id": "310100", "name": "大宗商品", "parentId": "310000", "remark": "JJJJJ", "childList": [ { "id": "310101", "name": "大宗商品綜合", "parentId": "310100", "remark": "IIIII", "childList": [] }, { "id": "310102", "name": "鋼鐵類電商", "parentId": "310100", "remark": "OOOOO", "childList": [] } ] }, { "id": "310200", "name": "綜合電商", "parentId": "310000", "remark": "NNNNN", "childList": [] } ] } ] }
通過一個小小的高頻業務場景,抽離業務共性,遮蔽業務細節,實現了通用型業務邏輯的編碼。
希望廣大技術朋友在完成日常開發工作的前提下,能夠進一步打磨程式碼,感受程式設計之美。
到此這篇關於Java利用TreeUtils工具類實現列表轉樹的文章就介紹到這了,更多相關Java TreeUtils列表轉樹內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45