TreeUtils工具類一行程式碼實現列錶轉樹 實戰Java8 三級菜單 三級分類 附影片

一、序言

在日常一線開發過程中,總有列錶轉樹的需求,幾乎是項目的標配,比方說做多級菜單、多級目錄、多級分類等,有沒有一種通用且跨項目的解決方式呢?幫助廣大技術朋友給業務瘦身,提高開發效率。

本文將基於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": []
            }
          ]
        }
      ]
    }
  ]
}

三、小結

通過一個小小的高頻業務場景,抽離業務共性,屏蔽業務細節,實現了通用型業務邏輯的編碼。

希望廣大技術朋友在完成日常開發工作的前提下,能夠進一步打磨程式碼,感受編程之美。