亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

教你如何使用Java8實(shí)現(xiàn)菜單樹形數(shù)據(jù)

 更新時(shí)間:2021年06月16日 11:09:17   作者:lovoo  
今天給大家?guī)淼氖顷P(guān)于JAVA的相關(guān)知識(shí),文中圍繞著如何使用Java8實(shí)現(xiàn)菜單樹形數(shù)據(jù)展開,文中有非常詳細(xì)的介紹及代碼示例,需要的朋友可以參考下

Java8實(shí)現(xiàn)菜單樹形數(shù)據(jù)

當(dāng)我們打開京東商城時(shí),左側(cè)的菜單依次分為三級(jí)展示,這是如何實(shí)現(xiàn)的呢?

在這里插入圖片描述

本篇暫不講述前端,只講述如何使用java8 的lamada表達(dá)式實(shí)現(xiàn)樹形數(shù)據(jù)的拼裝

1.創(chuàng)建菜單表

CREATE TABLE `pms_category`  (
  `cat_id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '分類id',
  `name` char(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '分類名稱',
  `parent_cid` bigint(20) NULL DEFAULT NULL COMMENT '父分類id',
  `cat_level` int(11) NULL DEFAULT NULL COMMENT '層級(jí)',
  `show_status` tinyint(4) NULL DEFAULT NULL COMMENT '是否顯示[0-不顯示,1顯示]',
  `sort` int(11) NULL DEFAULT NULL COMMENT '排序',
  `icon` char(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '圖標(biāo)地址',
  `product_unit` char(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '計(jì)量單位',
  `product_count` int(11) NULL DEFAULT NULL COMMENT '商品數(shù)量',
  PRIMARY KEY (`cat_id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 1433 CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '商品三級(jí)分類' ROW_FORMAT = Dynamic;

2.創(chuàng)建實(shí)體類

其中children用來存放子類

@Data
@TableName("pms_category")
public class CategoryEntity implements Serializable {
	private static final long serialVersionUID = 1L;

	/**
	 * 分類id
	 */
	@TableId
	private Long catId;
	/**
	 * 分類名稱
	 */
	private String name;
	/**
	 * 父分類id
	 */
	private Long parentCid;
	/**
	 * 層級(jí)
	 */
	private Integer catLevel;
	/**
	 * 是否顯示[0-不顯示,1顯示]
	 */
	private Integer showStatus;
	/**
	 * 排序
	 */
	private Integer sort;
	/**
	 * 圖標(biāo)地址
	 */
	private String icon;
	/**
	 * 計(jì)量單位
	 */
	private String productUnit;
	/**
	 * 商品數(shù)量
	 */
	private Integer productCount;

	/**
	 * 子分類
	 */
	@TableField(exist = false)
	private List<CategoryEntity> children;

}

3.實(shí)現(xiàn)一級(jí)分類

3.1)首先要查詢出所有的分類信息entities
3.2)然后對(duì)entities過濾查找一級(jí)分類,其中一級(jí)分的parentId == 0
3.3)設(shè)置當(dāng)前一級(jí)分類的子分類
3.4)對(duì)一級(jí)分類進(jìn)行排序

代碼如下:

public List<CategoryEntity> listWithTree() {
        //1.查詢所有分類
        List<CategoryEntity> entities = baseMapper.selectList(null);
        //2.組裝
        //2.1) 所到所有的一級(jí)類別 ,parentId = 0
        List<CategoryEntity> levelOneMenus = entities.stream()
                .filter(item ->  item.getParentCid() == 0)
                .map(item -> {
                    item.setChildren(this.getChildrens(item, entities));
                    return item;
                })
                .sorted((item1, item2) -> {
                    return (item1.getSort() == null ? 0 : item1.getSort())  - (item2.getSort() == null ? 0 : item2.getSort());
                })
                .collect(Collectors.toList());
        return levelOneMenus;
    }

4.使用遞歸對(duì)子分類再進(jìn)行樹形組裝

4.1)首先判斷當(dāng)前的id是否有等于集合中的元素的parentId
4.2)再對(duì)當(dāng)前子分類使用遞歸設(shè)置子分類
4.3)對(duì)當(dāng)前子分類排序
4.4)返回子分類集合

詳細(xì)代碼實(shí)現(xiàn)如下:

private List<CategoryEntity> getChildrens(CategoryEntity root, List<CategoryEntity> all){
        List<CategoryEntity> treeMenus = all.stream()
                //如果菜單中的父菜單Id == 當(dāng)前菜單的id,則說明是子菜單
                .filter(item ->  Objects.equals(item.getParentCid(), root.getCatId()))
                .map(item -> {
                    //遞歸添加子菜單
                    List<CategoryEntity> childrens = getChildrens(item, all);
                    item.setChildren(childrens);
                    return item;
                })
                //排序
                .sorted((item1, item2) -> {
                    return (item1.getSort() == null ? 0 : item1.getSort())  - (item2.getSort() == null ? 0 : item2.getSort());
                })
                .collect(Collectors.toList());
        return treeMenus;
    }

到此這篇關(guān)于教你如何使用Java8實(shí)現(xiàn)菜單樹形數(shù)據(jù)的文章就介紹到這了,更多相關(guān)Java8實(shí)現(xiàn)菜單樹形數(shù)據(jù)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • IDEA手動(dòng)添加junit4時(shí)出現(xiàn)的問題與解決方法

    IDEA手動(dòng)添加junit4時(shí)出現(xiàn)的問題與解決方法

    這篇文章主要給大家介紹了關(guān)于IDEA手動(dòng)添加junit4時(shí)出現(xiàn)的問題與解決方法,文中通過圖文介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-03-03
  • 詳解如何繼承Mybatis中Mapper.xml文件

    詳解如何繼承Mybatis中Mapper.xml文件

    這篇文章主要為大家介紹了詳解如何繼承Mybatis中Mapper.xml文件,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-09-09
  • Springboot事務(wù)失效的幾種情況解讀

    Springboot事務(wù)失效的幾種情況解讀

    這篇文章主要介紹了Springboot事務(wù)失效的幾種情況解讀,因?yàn)镾pring AOP默認(rèn)使用動(dòng)態(tài)代理,會(huì)給被代理的類生成一個(gè)代理類,事務(wù)相關(guān)的操作都通過代理來完成,使用內(nèi)部方法調(diào)用時(shí),使用的是實(shí)例調(diào)用,沒有通過代理類調(diào)用方法,因此事務(wù)不會(huì)檢測到失敗,需要的朋友可以參考下
    2023-10-10
  • Javaweb會(huì)話跟蹤技術(shù)Cookie和Session的具體使用

    Javaweb會(huì)話跟蹤技術(shù)Cookie和Session的具體使用

    本文主要介紹了Javaweb會(huì)話跟蹤技術(shù)Cookie&Session的具體使用,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-07-07
  • 解決MyEclipse中Maven設(shè)置jdk版本jdk1.8報(bào)錯(cuò)問題

    解決MyEclipse中Maven設(shè)置jdk版本jdk1.8報(bào)錯(cuò)問題

    今天安裝了jdk1.8、tomcat8、和maven3.5.2,弄好后在myeclipse新建了一個(gè)maven項(xiàng)目,項(xiàng)目默認(rèn)是jdk1.5,改成jdk1.8后項(xiàng)目報(bào)錯(cuò)
    2018-10-10
  • java實(shí)現(xiàn)文件切片和合并的代碼示例

    java實(shí)現(xiàn)文件切片和合并的代碼示例

    這篇文章主要介紹了java實(shí)現(xiàn)文件切片和合并的代碼示例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-07-07
  • 詳解java面試題中的i++和++i

    詳解java面試題中的i++和++i

    這篇文章主要介紹了java面試題中的i++和++i的相關(guān)資料,需要的朋友可以參考下
    2018-03-03
  • java生成彩色附logo二維碼

    java生成彩色附logo二維碼

    這篇文章主要為大家介紹了java生成帶logo的多彩二維碼,比一般二維碼顏色鮮艷,美觀,如何生成二維碼,下面小編為大家分享實(shí)現(xiàn)代碼,感興趣的小伙伴們可以參考一下
    2016-04-04
  • MySQL查詢字段實(shí)現(xiàn)字符串分割split功能的示例代碼

    MySQL查詢字段實(shí)現(xiàn)字符串分割split功能的示例代碼

    本文主要介紹了MySQL查詢字段實(shí)現(xiàn)字符串分割split功能的示例代碼,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-01-01
  • SpringBoot下載Excel文件時(shí),報(bào)錯(cuò)文件損壞的解決方案

    SpringBoot下載Excel文件時(shí),報(bào)錯(cuò)文件損壞的解決方案

    這篇文章主要介紹了SpringBoot下載Excel文件時(shí),報(bào)錯(cuò)文件損壞的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-06-06

最新評(píng)論