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

Java實(shí)現(xiàn)樹(shù)形結(jié)構(gòu)的示例代碼

 更新時(shí)間:2022年05月13日 17:16:08   作者:小劉要努力(????_??)?  
由于業(yè)務(wù)需要,后端需要返回一個(gè)樹(shù)型結(jié)構(gòu)給前端,包含父子節(jié)點(diǎn)的數(shù)據(jù)已經(jīng)在數(shù)據(jù)庫(kù)中存儲(chǔ)好。本文將為大家分享Java現(xiàn)樹(shù)形結(jié)構(gòu)的示例代碼,需要的可以參考下

前言

由于業(yè)務(wù)需要,后端需要返回一個(gè)樹(shù)型結(jié)構(gòu)給前端,包含父子節(jié)點(diǎn)的數(shù)據(jù)已經(jīng)在數(shù)據(jù)庫(kù)中存儲(chǔ)好,現(xiàn)在需要做的是如何以樹(shù)型結(jié)構(gòu)的形式返給給前端。

數(shù)據(jù)庫(kù)表結(jié)構(gòu)

實(shí)現(xiàn)思路

1、拿到有父子節(jié)點(diǎn)的集合數(shù)據(jù)

2、遍歷集合數(shù)據(jù),拿到所有的根節(jié)點(diǎn)

3、遍歷根節(jié)點(diǎn),拿到所有的子節(jié)點(diǎn)

4、遞歸子節(jié)點(diǎn),將遞歸的子節(jié)點(diǎn)接上其父節(jié)點(diǎn),直到子節(jié)點(diǎn)為空,遞歸完成

5、遞歸好后以集合形式返回,返回前端時(shí)以JSON格式轉(zhuǎn)換后返回

具體代碼

1、造數(shù)據(jù),和數(shù)據(jù)庫(kù)表數(shù)據(jù)一致

package com.lyq.generateTree;
 
import com.alibaba.fastjson.JSON;
 
import java.util.ArrayList;
import java.util.List;
 
/**
 * @author : [LiuYanQiang]
 * @version : [v1.0]
 * @className : TreeMain
 * @description : [描述說(shuō)明該類(lèi)的功能]
 * @createTime : [2022/5/3 0:05]
 * @updateUser : [LiuYanQiang]
 * @updateTime : [2022/5/3 0:05]
 * @updateRemark : [描述說(shuō)明本次修改內(nèi)容]
 */
public class TreeMain {
    public static void main(String[] args) {
        List<Tree> list = new ArrayList<>();
 
        //造數(shù)據(jù)
        list.add(new Tree("22650", "0", "第一周"));
        list.add(new Tree("22651", "22650", "1.1  隨堂練習(xí):《你認(rèn)為以下屬于人工智能的是什么呢?》,時(shí)間:0.5min"));
        list.add(new Tree("22652", "22650", "1.2  主題討論:《使用循環(huán)代碼塊繪制正五角星》,時(shí)間:5min"));
        list.add(new Tree("22653", "22650", "1.3  主題討論:《延時(shí)測(cè)試》,時(shí)間:0.5min"));
        list.add(new Tree("22654", "22650", "1.4  調(diào)查問(wèn)卷:《測(cè)試延時(shí)時(shí)間》, 時(shí)間:0.5min"));
        list.add(new Tree("22655", "22650", "1.5  研究與挑戰(zhàn):翟文彪老師開(kāi)播啦,時(shí)間:1min,[N]"));
        list.add(new Tree("22656", "22650", "1.6  研究與挑戰(zhàn):米新江教授開(kāi)播啦,時(shí)間:1min,[N]"));
        list.add(new Tree("22657", "22656", "1.6.1  研究與挑戰(zhàn):丁中文老師開(kāi)播啦,時(shí)間:1min,[N]"));
        list.add(new Tree("22658", "22656", "1.6.2  研究與挑戰(zhàn):郝曉軍老師開(kāi)播啦,時(shí)間:1min,[N]"));
        list.add(new Tree("22659", "22656", "1.6.3  研究與挑戰(zhàn):張娟老師開(kāi)播啦,時(shí)間:1min,[N]"));
        list.add(new Tree("22660", "22656", "1.6.4  研究與挑戰(zhàn):王懷軍老師開(kāi)播啦,時(shí)間:1min,[N]"));
        list.add(new Tree("22661", "22656", "1.6.5  研究與挑戰(zhàn):何操老師開(kāi)播啦,時(shí)間:1min,[N]"));
        list.add(new Tree("22662", "22656", "1.6.6  研究與挑戰(zhàn):武新麗老師開(kāi)播啦,時(shí)間:1min,[N]"));
        list.add(new Tree("22663", "22656", "1.6.7  一鍵簽到:人臉識(shí)別,時(shí)間:2min"));
        list.add(new Tree("22664", "22656", "1.6.8  手勢(shì)簽到:人臉識(shí)別22,時(shí)間:2min"));
        list.add(new Tree("22665", "22656", "1.6.9  研究與挑戰(zhàn):吳欣明老師開(kāi)播啦,時(shí)間:1min,[N]"));
        list.add(new Tree("22666", "22656", "1.6.10  研究與挑戰(zhàn):程艷艷老師開(kāi)播啦,時(shí)間:1min,[N]"));
        list.add(new Tree("22667", "22656", "1.6.11  研究與挑戰(zhàn):本學(xué)期課程內(nèi)容,時(shí)間:0.5min"));
        list.add(new Tree("22668", "22656", "1.6.12  研究與挑戰(zhàn):米老師的教學(xué)團(tuán)隊(duì)介紹,時(shí)間:0.3min"));
        list.add(new Tree("22669", "22650", "1.7  研究與挑戰(zhàn):米老師的教學(xué)團(tuán)隊(duì)介紹,時(shí)間:0.3min"));
        list.add(new Tree("22670", "22650", "1.8  研究與挑戰(zhàn):米老師的教學(xué)團(tuán)隊(duì)介紹,時(shí)間:0.3min"));
        list.add(new Tree("22671", "22650", "1.9  研究與挑戰(zhàn):助教機(jī)器人提醒您參與活動(dòng),時(shí)間:2min"));
        list.add(new Tree("22672", "22650", "1.10  研究與挑戰(zhàn):AR系統(tǒng)使用教程-學(xué)生端,時(shí)間:5min"));
        list.add(new Tree("22673", "22672", "1.10.1  研究與挑戰(zhàn):不一樣的課堂修改版,時(shí)間:0.5min"));
        list.add(new Tree("22674", "22673", "1.10.1.1  研究與挑戰(zhàn):下載AR APP,時(shí)間:8min"));
        list.add(new Tree("22675", "22674", "1.10.1.1.1  研究與挑戰(zhàn):修改版手機(jī)端AR助教機(jī)器人的登錄,時(shí)間:5min"));
        list.add(new Tree("22676", "22674", "1.10.1.1.2  研究與挑戰(zhàn):app頁(yè)面展示,時(shí)間:2min"));
        list.add(new Tree("22677", "22674", "1.10.1.1.3  研究與挑戰(zhàn):使用網(wǎng)頁(yè)版方式, 時(shí)間:3min"));
        list.add(new Tree("22678", "22674", "1.10.1.1.4  研究與挑戰(zhàn):《使用學(xué)習(xí)通賬號(hào)密碼登錄AR網(wǎng)頁(yè)版》,時(shí)間:5min"));
        list.add(new Tree("22679", "22674", "1.10.1.1.5  主題討論:修改時(shí)間2022年4月4日《上傳:進(jìn)入AR網(wǎng)頁(yè)版后的界面》,時(shí)間:3min"));
        list.add(new Tree("22680", "22673", "1.10.1.2  研究與挑戰(zhàn):AR學(xué)生端教程視頻,時(shí)間:2min"));
        list.add(new Tree("22681", "22672", "1.10.2  研究與挑戰(zhàn):修改時(shí)間2022年4月4日溫馨提示-釘釘,時(shí)間:0.3min"));
 
 
        list = new ReplacementTree().builTree(list);
 
        String jsonString = JSON.toJSONString(list);
        System.out.println(jsonString);
    }
}

2、樹(shù)型結(jié)構(gòu)實(shí)體類(lèi)

package com.lyq.generateTree;
 
 
import java.util.ArrayList;
import java.util.List;
 
/**
 * @author : [LiuYanQiang]
 * @version : [v1.0]
 * @className : ReplacementTree
 * @description : [樹(shù)型結(jié)構(gòu)裝換]
 * @createTime : [2022/5/2 23:37]
 * @updateUser : [LiuYanQiang]
 * @updateTime : [2022/5/2 23:37]
 * @updateRemark : [描述說(shuō)明本次修改內(nèi)容]
 */
public class ReplacementTree {
 
    /*
     * @version V1.0
     * Title: builTree
     * @author LiuYanQiang
     * @description 始樹(shù)形結(jié)構(gòu)創(chuàng)建
     * @createTime  2022/5/3 0:18
     * @param [list]
     * @return java.util.List<com.lyq.generateTree.Tree>*/
    public List<Tree> builTree(List<Tree> list) {
        List<Tree> treeList = new ArrayList<>();
        for (Tree tree : this.getRootNode(list)) {
            //建立子樹(shù)節(jié)點(diǎn)
            tree = this.buildChilTree(tree,list);
            //為根節(jié)點(diǎn)設(shè)置子樹(shù)節(jié)點(diǎn)
            treeList.add(tree);
        }
        return treeList;
    }
 
    /*
     * @version V1.0
     * Title: buildChilTree
     * @author LiuYanQiang
     * @description 通過(guò)遞歸來(lái)創(chuàng)建子樹(shù)形結(jié)構(gòu)
     * @createTime  2022/5/3 0:18
     * @param [tree, list]
     * @return com.lyq.generateTree.Tree*/
    private Tree buildChilTree(Tree tree,List<Tree> list) {
        List<Tree> treeList = new ArrayList<>();
        for (Tree t : list) {
            //判斷當(dāng)前父節(jié)點(diǎn)是否存在子節(jié)點(diǎn)
            if (t.getP_id().equals(tree.getId())) {
                treeList.add(this.buildChilTree(t,list));
            }
        }
        tree.setChildren(treeList);
        return tree;
    }
 
    /*
     * @version V1.0
     * Title: getRootNode
     * @author LiuYanQiang
     * @description 獲取全部根節(jié)點(diǎn)
     * @createTime  2022/5/3 0:18
     * @param [list]
     * @return java.util.List<com.lyq.generateTree.Tree>*/
    private List<Tree> getRootNode(List<Tree> list) {
        List<Tree> rootList = new ArrayList<>();
        for (Tree tree : list) {
            if (tree.getP_id().equals("0")) {
                rootList.add(tree);
            }
        }
        return rootList;
    }
}

最后返回情況如下

到此這篇關(guān)于Java實(shí)現(xiàn)樹(shù)形結(jié)構(gòu)的示例代碼的文章就介紹到這了,更多相關(guān)Java樹(shù)形結(jié)構(gòu)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Spring Security使用單點(diǎn)登錄的權(quán)限功能

    Spring Security使用單點(diǎn)登錄的權(quán)限功能

    本文主要介紹了Spring Security使用單點(diǎn)登錄的權(quán)限功能,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2022-04-04
  • Java中CopyOnWriteArrayList的使用解析

    Java中CopyOnWriteArrayList的使用解析

    這篇文章主要介紹了Java中CopyOnWriteArrayList的使用解析,CopyOnWriteArrayList適合使用在讀操作遠(yuǎn)遠(yuǎn)大于寫(xiě)操作的場(chǎng)景里,比如緩存,它不存在擴(kuò)容的概念,每次寫(xiě)操作都要復(fù)制一個(gè)副本,在副本的基礎(chǔ)上修改后改變Array引用,需要的朋友可以參考下
    2023-12-12
  • Spring?Boot?接口加解密功能實(shí)現(xiàn)

    Spring?Boot?接口加解密功能實(shí)現(xiàn)

    在我們?nèi)粘5腏ava開(kāi)發(fā)中,免不了和其他系統(tǒng)的業(yè)務(wù)交互,或者微服務(wù)之間的接口調(diào)用;如果我們想保證數(shù)據(jù)傳輸?shù)陌踩?,?duì)接口出參加密,入?yún)⒔饷埽@篇文章主要介紹了Spring?Boot?接口加解密功能實(shí)現(xiàn),需要的朋友可以參考下
    2023-04-04
  • Java中Synchronized的用法解析

    Java中Synchronized的用法解析

    synchronized是Java中的關(guān)鍵字,是一種同步鎖,本文給大家詳細(xì)介紹Java Synchronized 用法大全,感興趣的朋友跟隨小編一起看看吧
    2021-11-11
  • 詳解eclipse將項(xiàng)目打包成jar文件的兩種方法及問(wèn)題解決方法

    詳解eclipse將項(xiàng)目打包成jar文件的兩種方法及問(wèn)題解決方法

    本文給大家介紹了eclipse中將項(xiàng)目打包成jar文件的兩種方法及其遇到問(wèn)題解決方法,本文圖文并茂給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2017-12-12
  • Java的wait(), notify()和notifyAll()使用心得

    Java的wait(), notify()和notifyAll()使用心得

    本篇文章是對(duì)java的 wait(),notify(),notifyAll()進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-08-08
  • JAVA版排序算法之快速排序示例

    JAVA版排序算法之快速排序示例

    這篇文章主要介紹了JAVA版排序算法之快速排序,結(jié)合實(shí)例形式分析了基于java版的遍歷、遞歸實(shí)現(xiàn)快速排序功能的具體步驟與操作技巧,需要的朋友可以參考下
    2017-01-01
  • java如何利用FastJSON、Gson、Jackson三種Json格式工具自定義時(shí)間序列化

    java如何利用FastJSON、Gson、Jackson三種Json格式工具自定義時(shí)間序列化

    本篇文章主要介紹了java如何利用FastJSON、Gson、Jackson三種Json格式工具自定義時(shí)間序列化,具有一定的參考價(jià)值,有興趣的可以了解一下
    2017-08-08
  • java 抽象類(lèi)與接口的區(qū)別總結(jié)

    java 抽象類(lèi)與接口的區(qū)別總結(jié)

    這篇文章主要介紹了java 抽象類(lèi)與接口的區(qū)別總結(jié)的相關(guān)資料,需要的朋友可以參考下
    2017-02-02
  • Ubuntu16.04 64位下JDK1.7的安裝教程

    Ubuntu16.04 64位下JDK1.7的安裝教程

    這篇文章主要為大家詳細(xì)介紹了Ubuntu16.04 64位下JDK1.7的安裝教程,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-09-09

最新評(píng)論

康平县| 长治市| 瑞昌市| 崇左市| 玉环县| 凤城市| 梁平县| 孟州市| 芦山县| 秀山| 图们市| 寿光市| 遵义县| 湾仔区| 娄烦县| 广宁县| 贵港市| 中卫市| 西宁市| 和田市| 衡阳市| 名山县| 高邮市| 贵南县| 衢州市| 武夷山市| 井冈山市| 东乡| 盐池县| 芜湖市| 崇礼县| 柘城县| 响水县| 平乐县| 北流市| 班戈县| 自治县| 兰西县| 甘谷县| 保靖县| 肃宁县|