1. 程式人生 > >java返回樹形結構的正確姿勢

java返回樹形結構的正確姿勢

# 業務場景 通常我們前端需要一個樹形的導航選單或者分類選單,如後臺許可權管理中的許可權樹,亦或者下面例子中商城系統的商品分類多級選單(一般為三級選單) # 資料庫設計 資料庫設計,採用`parentId`來指向自己的父級選單,如: ```mysql CREATE TABLE `pms_category` ( `cat_id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '分類id', `name` char(50) DEFAULT NULL COMMENT '分類名稱', `parent_cid` bigint(20) DEFAULT NULL COMMENT '父分類id', `cat_level` int(11) DEFAULT NULL COMMENT '層級', `show_status` tinyint(4) DEFAULT NULL COMMENT '是否顯示[0-不顯示,1顯示]', `sort` int(11) DEFAULT NULL COMMENT '排序', `icon` char(255) DEFAULT NULL COMMENT '圖示地址', `product_unit` char(50) DEFAULT NULL COMMENT '計量單位', `product_count` int(11) DEFAULT NULL COMMENT '商品數量', PRIMARY KEY (`cat_id`) ) ENGINE=InnoDB AUTO_INCREMENT=1433 DEFAULT CHARSET=utf8mb4 COMMENT='商品三級分類'; ``` # java組裝樹形結構 之前的做法是通過sql自連線來查出樹形結構資料,但是效率不高,我們知道單表查詢效率是最高的,我們可以一次查出所有資料,通過`java8`的新特性` stream`來處理資料,`stream`是通過`CPU`計算實現,效率極高,具體用法可以參考: [Java 8新特性之 Lambd和StreamAPI](https://blog.csdn.net/weixin_41793969/article/details/105489106) 下面是處理資料的兩個主要方法: ```java @Override public List