最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

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

那么這種的類別樹是怎么實現(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;
 }

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

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

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

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

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.啟動項目看效果

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

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

  • Java overload和override的區(qū)別分析

    Java overload和override的區(qū)別分析

    方法的重寫(Overriding)和重載(Overloading)是Java多態(tài)性的不同表現(xiàn),想要了解更多請參考本文
    2012-11-11
  • JVM的類加載器和雙親委派模式你了解嗎

    JVM的類加載器和雙親委派模式你了解嗎

    這篇文章主要為大家詳細介紹了JVM類加載器和雙親委派模式,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-03-03
  • idea中l(wèi)ombok的用法

    idea中l(wèi)ombok的用法

    lombok是開源的代碼生成庫,是一款非常實用的小工具,在更改實體類時只需要修改屬性即可,減少了很多重復代碼的編寫工作,今天小編給大家介紹idea中l(wèi)ombok的用法,感興趣的朋友一起看看吧
    2021-12-12
  • SpringBoot之如何搭建SpringBoot+Maven項目

    SpringBoot之如何搭建SpringBoot+Maven項目

    這篇文章主要介紹了SpringBoot之如何搭建SpringBoot+Maven項目問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-07-07
  • SpringBoot中JPA實現(xiàn)Sort排序的三種方式小結

    SpringBoot中JPA實現(xiàn)Sort排序的三種方式小結

    這篇文章主要介紹了SpringBoot中JPA實現(xiàn)Sort排序的三種方式小結,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-11-11
  • java版十大排序經(jīng)典算法:完整代碼(4)

    java版十大排序經(jīng)典算法:完整代碼(4)

    優(yōu)秀的文章也不少,但是Java完整版的好像不多,我把所有的寫一遍鞏固下,同時也真誠的希望閱讀到這篇文章的小伙伴們可以自己去從頭敲一遍,不要粘貼復制!希望我的文章對你有所幫助,每天進步一點點
    2021-07-07
  • java參數(shù)傳遞之值傳遞和引用傳遞

    java參數(shù)傳遞之值傳遞和引用傳遞

    這篇文章主要介紹了java參數(shù)傳遞之值傳遞和引用傳遞,引用了兩個代碼實例來講解,有感興趣的同學可以研究下
    2021-02-02
  • java調用oracle分頁存儲過程示例

    java調用oracle分頁存儲過程示例

    這篇文章主要介紹了java調用oracle分頁存儲過程,需要的朋友可以參考下
    2014-03-03
  • 如何批量測試Mybatis項目中的Sql是否正確詳解

    如何批量測試Mybatis項目中的Sql是否正確詳解

    這篇文章主要給大家介紹了關于如何批量測試Mybatis項目中Sql是否正確的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2018-12-12
  • 最新評論

    原阳县| 惠东县| 观塘区| 雷波县| 藁城市| 塘沽区| 大化| 宝坻区| 辽阳县| 大庆市| 嘉鱼县| 罗定市| 米脂县| 老河口市| 上思县| 香港| 东阿县| 东丽区| 剑阁县| 铜山县| 健康| 小金县| 广饶县| 大宁县| 九龙坡区| 吉首市| 四子王旗| 怀安县| 古蔺县| 苏州市| 琼结县| 二连浩特市| 永清县| 四会市| 克拉玛依市| 龙门县| 图片| 邹平县| 安顺市| 阜新市| 永新县|