一、序言 在日常一線開發過程中,總有列表轉樹的需求,幾乎是項目的標配,比方說做多級菜單、多級目錄、多級分類等,有沒有一種通用且跨項目的解決方式呢?幫助廣大技術朋友給業務瘦身,提高開發效率。 本文將基於Java8的Lambda 表達式和Stream等知識,使用TreeUtils工具類實現一行代碼完成列 ...
一、序言
在日常一線開發過程中,總有列表轉樹
的需求,幾乎是項目的標配,比方說做多級菜單、多級目錄、多級分類等,有沒有一種通用且跨項目的解決方式呢?幫助廣大技術朋友給業務瘦身,提高開發效率。
本文將基於Java8的Lambda 表達式和Stream等知識,使用TreeUtils
工具類實現一行代碼完成列表轉樹這一通用型需求。本文有配套視頻,傳送門直達。
二、實戰編碼
1、引入坐標
本坐標地址包含TreeUtils
工具類方法,已經發佈到Maven中央倉庫,建議使用最新的版本號,本文法佈施版本是1.5.8
。
學習源碼的朋友,源碼直通車
<dependency>
<groupId>xin.altitude.cms</groupId>
<artifactId>ucode-cms-common</artifactId>
<version>1.5.8</version>
</dependency>
2、實現介面
列表實體類實現ITreeEntity
並實現抽象方法。
/**
* 類別表
*/
@Data
@NoArgsConstructor
@AllArgsConstructor
@TableName(value = "bu_category")
public class Category implements ITreeEntity<String> {
private static final long serialVersionUID = 1L;
@TableId(type = IdType.AUTO)
private String id;
private String name;
private String parentId;
}
3、調用TreeUtils工具類
在服務層調用TreeUtils工具類,一行代碼完成轉換。
public List<TreeNode<String>> selectCategoryList2() {
List<Category> list = this.list();
// 一行代碼實現列表轉樹結構 通用型代碼 能夠跨項目使用 業務解藕
return TreeUtils.createNode(list, "000000");
}
4、效果展示
原始列表數據
{
"code": 200,
"msg": "操作成功",
"data": [
{
"id": "310000",
"name": "電子商務",
"parentId": "000000"
},
{
"id": "310100",
"name": "大宗商品",
"parentId": "310000"
},
{
"id": "310101",
"name": "大宗商品綜合",
"parentId": "310100"
},
{
"id": "310102",
"name": "鋼鐵類電商",
"parentId": "310100"
}
]
}
樹狀層次數據
{
"code": 200,
"msg": "操作成功",
"data": [
{
"id": "310000",
"name": "電子商務",
"childList": [
{
"id": "310100",
"name": "大宗商品",
"childList": [
{
"id": "310101",
"name": "大宗商品綜合",
"childList": []
},
{
"id": "310102",
"name": "鋼鐵類電商",
"childList": []
}
]
}
]
}
]
}
三、小結
通過一個小小的高頻業務場景,抽離業務共性,屏蔽業務細節,實現了通用型業務邏輯的編碼。
希望廣大技術朋友在完成日常開發工作的前提下,能夠進一步打磨代碼,感受編程之美。
喜歡本文就【♥️推薦♥️】一下,激勵我持續創作。這個Github同樣精彩,收到您的star我會很激動。本文歸檔在專題博客,視頻講解在B站。