欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

java利用遞歸實現(xiàn)類別樹示例代碼

 更新時間:2020年12月17日 09:23:33   作者:去撒哈拉當海盜  
這篇文章主要給大家介紹了關(guān)于java利用遞歸實現(xiàn)類別樹的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧

在瀏覽淘寶,京東等各大商場的時候會發(fā)現(xiàn)首頁一般都是商品分類,并且這個商品分類都是層級關(guān)系。下圖以天貓商場為例,分為了三層的樹狀結(jié)構(gòu)?。?!

那么這種的類別樹是怎么實現(xiàn)的呢?話不多說直接上代碼:

1.首先我們新建一張商品類別表并維護所需數(shù)據(jù):

2.創(chuàng)建商品類別實體

@Data
@EqualsAndHashCode(callSuper = false)
@Accessors(chain = true)
@ApiModel("商品類別表")
public class OrdersCategory implements Serializable {

	private static final long serialVersionUID = 1L;

 @ApiModelProperty(value = "類別主鍵")
 @TableId(value = "id", type = IdType.ASSIGN_ID)
 private Integer catId;

 @ApiModelProperty(value = "分類名稱")
 private String name;

 @ApiModelProperty(value = "父分類id")
 private Integer parentCid;

 @ApiModelProperty(value = "層級")
 private Integer catLevel;

 @ApiModelProperty(value = "是否顯示[0-不顯示,1顯示]")
 private Integer showStatus;

 @ApiModelProperty(value = "排序")
 private Integer sort;

 @ApiModelProperty(value = "圖標地址")
 private String icon;

 @ApiModelProperty(value = "計量單位")
 private String productUnit;

 @ApiModelProperty(value = "商品數(shù)量")
 private String productCount;
}

3.創(chuàng)建類別樹返回實體

@Data
@EqualsAndHashCode(callSuper = false)
@Accessors(chain = true)
@ApiModel("商品類別返回對象")
public class OrdersCategoryVo extends OrdersCategory implements Serializable {

 private static final long serialVersionUID = 1L;

 @ApiModelProperty(value = "子類別樹")
 List<OrdersCategoryVo> childrenCategoryList;
}

4.遞歸邏輯代碼編寫

 /**
  * 獲取商品類別樹
  * @return
  */
 @Override
 public List<OrdersCategoryVo> getCategoryTree() {
  //查出分類表所有數(shù)據(jù)
  List<OrdersCategoryVo> entityList = categoryMapper.getCategoryTreeAll();
  //查詢出所有的一級分類數(shù)據(jù). 使用stream的api
  List<OrdersCategoryVo> firstEntityList = entityList.stream()
  	.filter(categoryVo -> categoryVo.getParentCid().intValue() == 0)
  	.map((menu) -> {
   //傳遞當前的商品分類, 和所有的分類,遞歸查詢出每個一級分類下的子分類
   menu.setChildrenCategoryList( getChildrens(menu,entityList));
   return menu;
  } ).collect(Collectors.toList());
  return firstEntityList;
 }

 /**
  * 遞歸查詢子父類
  * @param root 當前節(jié)點的父id
  * @param all 所有的商品分類
  * @return
  */
 private List<OrdersCategoryVo> getChildrens(OrdersCategoryVo root, List<OrdersCategoryVo> all) {
  List<OrdersCategoryVo> childrenList = all.stream()
  	.filter(categoryVo -> categoryVo.getParentCid().intValue() == root.getCatId().intValue())
  	.map(categoryVo -> {
   //子菜單可能還有子菜單, 因此遞歸查詢 , 查詢出子菜單
   categoryVo.setChildrenCategoryList(getChildrens(categoryVo, all));
   return categoryVo;
  }).collect(Collectors.toList());

  return childrenList;
 }

關(guān)于實現(xiàn)邏輯,代碼上都有注釋,這里簡單講一下案例中stream的幾個方法

stream().filter:過濾,根據(jù)條件過濾掉集合中的元素

stream().map:映射,操作集合中的元素并返回新的元素

stream().collect(Collectors.toList()):結(jié)束操作,stream流無存儲,所以需要返回操作結(jié)束后的集合

5.前端使用Element的樹形控件渲染數(shù)據(jù)

<template>
 <el-tree :data="data" :props="defaultProps" @node-click="handleNodeClick"></el-tree>
</template>

<script>
import { getCategoryTree } from '@/api/category'

export default {
 data() {
 return {
  data: [],
  defaultProps: {
   children: 'childrenCategoryList',
   label: 'name'
  }
 }
 },
 created() {
  this.getData();
 },
 methods: {
 handleNodeClick () {

 },
 getData() {
  getCategoryTree()
  .then(response => {
   this.data = response.data.data.list
  })
  .catch(() => {
   this.data = []
  })
 }
 }

6.啟動項目看效果

初學前端,做的比較簡單。。。。。。。。。。。。。

到此這篇關(guān)于java利用遞歸實現(xiàn)類別樹的文章就介紹到這了,更多相關(guān)java遞歸實現(xiàn)類別樹內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

  • Springboot導入本地jar后 打包依賴無法加入的解決方案

    Springboot導入本地jar后 打包依賴無法加入的解決方案

    這篇文章主要介紹了Springboot導入本地jar后 打包依賴無法加入的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-11-11
  • java多線程讀取多個文件的方法

    java多線程讀取多個文件的方法

    這篇文章主要為大家詳細介紹了java多線程讀取多個文件的方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-08-08
  • Java并發(fā)系列之Semaphore源碼分析

    Java并發(fā)系列之Semaphore源碼分析

    這篇文章主要為大家詳細介紹了Java并發(fā)系列之Semaphore源碼,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-02-02
  • Java中Spring獲取bean方法小結(jié)

    Java中Spring獲取bean方法小結(jié)

    Spring是一個輕量級的控制反轉(zhuǎn)(IoC)和面向切面(AOP)的容器框架,如何在程序中獲取Spring配置的bean呢?下面通過本文給大家介紹Java中Spring獲取bean方法小結(jié),對spring獲取bean方法相關(guān)知識感興趣的朋友一起學習吧
    2016-01-01
  • Java設(shè)置token有效期的5個應(yīng)用場景(雙token實現(xiàn))

    Java設(shè)置token有效期的5個應(yīng)用場景(雙token實現(xiàn))

    Token最常見的應(yīng)用場景之一就是身份驗證,本文主要介紹了Java設(shè)置token有效期的5個應(yīng)用場景(雙token實現(xiàn)),具有一定的參考價值,感興趣的可以來了解一下
    2024-04-04
  • JDBC使用游標實現(xiàn)分頁查詢的方法

    JDBC使用游標實現(xiàn)分頁查詢的方法

    這篇文章主要介紹了JDBC使用游標實現(xiàn)分頁查詢的方法,實例分析了jdbc查詢過程中游標的使用及查詢分頁相關(guān)實現(xiàn)技巧,需要的朋友可以參考下
    2016-08-08
  • 詳解如何在Java中實現(xiàn)懶加載

    詳解如何在Java中實現(xiàn)懶加載

    懶加載是一種常見的優(yōu)化技術(shù),它可以延遲對象的創(chuàng)建或初始化,直到對象第一次被使用時才進行。在本文中,我們將介紹如何使用?Java?中的?Supplier?接口和雙重檢查鎖定模式來實現(xiàn)懶加載,并保證只初始化一次,希望對大家有所幫助
    2023-03-03
  • IDEA導入Eclipse項目的方法步驟(圖文教程)

    IDEA導入Eclipse項目的方法步驟(圖文教程)

    這篇文章主要介紹了IDEA導入Eclipse項目的方法步驟,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-03-03
  • Jackson處理Optional時遇到問題的解決與分析

    Jackson處理Optional時遇到問題的解決與分析

    Optional是Java實現(xiàn)函數(shù)式編程的強勁一步,并且?guī)椭诜妒街袑崿F(xiàn),但是Optional的意義顯然不止于此,下面這篇文章主要給大家介紹了關(guān)于Jackson處理Optional時遇到問題的解決與分析的相關(guān)資料,需要的朋友可以參考下
    2022-02-02
  • 最新評論