一擂涛、序言
在日常一線開發(fā)過程中读串,總有列表轉(zhuǎn)樹
的需求,幾乎是項(xiàng)目的標(biāo)配,比方說做多級(jí)菜單恢暖、多級(jí)目錄排监、多級(jí)分類等,有沒有一種通用且跨項(xiàng)目的解決方式呢杰捂?幫助廣大技術(shù)朋友給業(yè)務(wù)瘦身舆床,提高開發(fā)效率。
本文將基于Java8的Lambda 表達(dá)式和Stream等知識(shí)嫁佳,使用TreeUtils
工具類實(shí)現(xiàn)一行代碼完成列表轉(zhuǎn)樹這一通用型需求挨队。本文有配套視頻,傳送門直達(dá)脱拼。
二瞒瘸、實(shí)戰(zhàn)編碼
1坷备、引入坐標(biāo)
本坐標(biāo)地址包含TreeUtils
工具類方法熄浓,已經(jīng)發(fā)布到Maven中央倉庫,建議使用最新的版本號(hào)省撑,本文法布施版本是1.5.8
赌蔑。
學(xué)習(xí)源碼的朋友,源碼直通車
<dependency>
<groupId>xin.altitude.cms</groupId>
<artifactId>ucode-cms-common</artifactId>
<version>1.5.8</version>
</dependency>
2竟秫、實(shí)現(xiàn)接口
列表實(shí)體類實(shí)現(xiàn)ITreeEntity
并實(shí)現(xiàn)抽象方法娃惯。
/**
* 類別表
*/
@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、調(diào)用TreeUtils工具類
在服務(wù)層調(diào)用TreeUtils工具類肥败,一行代碼完成轉(zhuǎn)換趾浅。
public List<TreeNode<String>> selectCategoryList2() {
List<Category> list = this.list();
// 一行代碼實(shí)現(xiàn)列表轉(zhuǎn)樹結(jié)構(gòu) 通用型代碼 能夠跨項(xiàng)目使用 業(yè)務(wù)解藕
return TreeUtils.createNode(list, "000000");
}
4、效果展示
原始列表數(shù)據(jù)
{
"code": 200,
"msg": "操作成功",
"data": [
{
"id": "310000",
"name": "電子商務(wù)",
"parentId": "000000"
},
{
"id": "310100",
"name": "大宗商品",
"parentId": "310000"
},
{
"id": "310101",
"name": "大宗商品綜合",
"parentId": "310100"
},
{
"id": "310102",
"name": "鋼鐵類電商",
"parentId": "310100"
}
]
}
樹狀層次數(shù)據(jù)
{
"code": 200,
"msg": "操作成功",
"data": [
{
"id": "310000",
"name": "電子商務(wù)",
"childList": [
{
"id": "310100",
"name": "大宗商品",
"childList": [
{
"id": "310101",
"name": "大宗商品綜合",
"childList": []
},
{
"id": "310102",
"name": "鋼鐵類電商",
"childList": []
}
]
}
]
}
]
}
三馒稍、小結(jié)
通過一個(gè)小小的高頻業(yè)務(wù)場景皿哨,抽離業(yè)務(wù)共性,屏蔽業(yè)務(wù)細(xì)節(jié)纽谒,實(shí)現(xiàn)了通用型業(yè)務(wù)邏輯的編碼证膨。
希望廣大技術(shù)朋友在完成日常開發(fā)工作的前提下,能夠進(jìn)一步打磨代碼鼓黔,感受編程之美央勒。