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

Java中遞歸構(gòu)建樹(shù)形結(jié)構(gòu)的算法解讀

 更新時(shí)間:2025年03月04日 08:48:50   作者:微笑聽(tīng)雨。  
該文章介紹了如何使用Java遞歸算法構(gòu)建樹(shù)形結(jié)構(gòu),通過(guò)定義樹(shù)節(jié)點(diǎn)類,遍歷扁平數(shù)據(jù)列表,將節(jié)點(diǎn)加入對(duì)應(yīng)父節(jié)點(diǎn)的子節(jié)點(diǎn)列表中,實(shí)現(xiàn)從扁平數(shù)據(jù)到樹(shù)形結(jié)構(gòu)的轉(zhuǎn)換

Java遞歸構(gòu)建樹(shù)形結(jié)構(gòu)的算法

java遞歸獲取樹(shù)

當(dāng)我們處理像部門(mén)樹(shù)、菜單樹(shù)等樹(shù)形結(jié)構(gòu)數(shù)據(jù)時(shí),我們需要從后端獲取一組扁平的數(shù)據(jù)列表。

這些數(shù)據(jù)列表通常由一個(gè)父節(jié)點(diǎn)ID字段和一個(gè)當(dāng)前節(jié)點(diǎn)ID字段組成,這樣我們可以通過(guò)這兩個(gè)字段建立節(jié)點(diǎn)之間的父子關(guān)系。然后,我們可以利用這些數(shù)據(jù),通過(guò)遞歸的方式構(gòu)建樹(shù)形結(jié)構(gòu)。

  • 在Java后端中,我們可以通過(guò)遞歸函數(shù)來(lái)實(shí)現(xiàn)這一過(guò)程。
  • 首先,我們需要定義一個(gè)樹(shù)節(jié)點(diǎn)類,該類包含節(jié)點(diǎn)的基本信息和一個(gè)子節(jié)點(diǎn)列表。
  • 然后,我們遍歷扁平數(shù)據(jù)列表,對(duì)于每一個(gè)節(jié)點(diǎn),我們將其加入到對(duì)應(yīng)父節(jié)點(diǎn)的子節(jié)點(diǎn)列表中。
  • 如果當(dāng)前節(jié)點(diǎn)沒(méi)有子節(jié)點(diǎn),我們可以直接將其加入到樹(shù)的根節(jié)點(diǎn)列表中。
  • 然后,我們遞歸處理當(dāng)前節(jié)點(diǎn)的子節(jié)點(diǎn),直到所有節(jié)點(diǎn)都被加入到樹(shù)中。

通過(guò)這種方式,我們可以將扁平的數(shù)據(jù)列表轉(zhuǎn)換成樹(shù)形結(jié)構(gòu),使得數(shù)據(jù)更加清晰和有序。

這樣,前端可以利用這棵樹(shù)來(lái)構(gòu)建下拉菜單等形式的界面,為用戶提供更好的體驗(yàn)。

代碼如下:

public static void main(String[] args) {
    // todo 業(yè)務(wù)數(shù)據(jù)
    List<TreeVo> treeVoList = new ArrayList<>();

	// 處理父節(jié)點(diǎn)為空的情況
    treeVoList
            .stream()
            .filter(obj -> StringUtils.isBlank(obj.getPid()))
            .forEach(obj -> obj.setPid("-1"));

	// 根據(jù)父節(jié)點(diǎn)分組
    Map<String, List<TreeVo>> treeCatch = treeVoList.stream()
            .collect(Collectors.groupingBy(TreeVo::getPid));

    // 遞歸查詢子節(jié)點(diǎn),寫(xiě)入當(dāng)前數(shù)據(jù)
    treeVoList = findChildren(treeCatch, "-1");

    // 打印
    for (TreeVo treeVo : treeVoList) {
        System.out.println(JacksonUtil.bean2json(treeVo));
    }
}

private static List<TreeVo> findChildren(Map<String, List<TreeVo>> treeCatch, String parentId) {
    List<TreeVo> children = treeCatch.getOrDefault(parentId, new ArrayList<>());
    for (TreeVo treeVo : children) {
        List<TreeVo> subChildren = findChildren(treeCatch, treeVo.getId());
        treeVo.getChildren().addAll(subChildren);
    }
    return children;
}



/**
 * 獲取場(chǎng)地樹(shù)RVO
 */
public class TreeVo {

    /**
     * ID
     */
    private String id;

    /**
     * 名稱
     */
    private String name;
    
    /**
     * 父ID
     */
    private String pid;

    /**
     * 子級(jí)
     */
    private transient List<TreeVo> children;
	
	// 此處省略get\set
}

總結(jié)

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • SpringBoot整合MinIO實(shí)現(xiàn)文件存儲(chǔ)系統(tǒng)的代碼示例

    SpringBoot整合MinIO實(shí)現(xiàn)文件存儲(chǔ)系統(tǒng)的代碼示例

    在現(xiàn)代的應(yīng)用程序中,文件存儲(chǔ)和管理是一個(gè)常見(jiàn)的需求,MinIO是一個(gè)開(kāi)源的對(duì)象存儲(chǔ)系統(tǒng),與Spring?Boot框架結(jié)合使用,可以快速構(gòu)建高性能的文件存儲(chǔ)系統(tǒng),本文將介紹如何使用Spring?Boot和MinIO來(lái)實(shí)現(xiàn)文件存儲(chǔ)系統(tǒng)
    2023-06-06
  • SpringMVC多個(gè)文件上傳及上傳后立即顯示圖片功能

    SpringMVC多個(gè)文件上傳及上傳后立即顯示圖片功能

    這篇文章主要介紹了SpringMVC多個(gè)文件上傳及上傳后立即顯示圖片功能,非常不錯(cuò),具有參考借鑒價(jià)值功能,需要的朋友可以參考下
    2017-10-10
  • 淺談Java設(shè)計(jì)模式系列-裝飾器模式

    淺談Java設(shè)計(jì)模式系列-裝飾器模式

    這篇文章主要介紹了Java設(shè)計(jì)模式系列-裝飾器模式,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-03-03
  • SpringBoot?將配置文件掛到?jar?包外面的操作方法

    SpringBoot?將配置文件掛到?jar?包外面的操作方法

    在 SpringBoot 中,可以將配置文件放在 jar 包外面,這樣可以方便地修改配置而不需要重新打包和部署,這篇文章主要介紹了SpringBoot?如何將配置文件掛到?jar?包外面,需要的朋友可以參考下
    2023-03-03
  • Springboot整合PageOffice 實(shí)現(xiàn)word在線編輯保存功能

    Springboot整合PageOffice 實(shí)現(xiàn)word在線編輯保存功能

    這篇文章主要介紹了Springboot整合PageOffice 實(shí)現(xiàn)word在線編輯保存,本文以Samples5 為示例文件結(jié)合示例代碼給大家詳細(xì)介紹,需要的朋友可以參考下
    2021-08-08
  • Java開(kāi)發(fā)必會(huì)的Linux命令

    Java開(kāi)發(fā)必會(huì)的Linux命令

    這篇文章主要介紹了Java開(kāi)發(fā)必會(huì)的Linux命令,幫助大家更好地進(jìn)行java開(kāi)發(fā),感興趣的小伙伴們可以參考一下
    2015-12-12
  • Java將日期類型Date時(shí)間戳轉(zhuǎn)換為MongoDB的時(shí)間類型數(shù)據(jù)

    Java將日期類型Date時(shí)間戳轉(zhuǎn)換為MongoDB的時(shí)間類型數(shù)據(jù)

    今天小編就為大家分享一篇關(guān)于Java將日期類型Date時(shí)間戳轉(zhuǎn)換為MongoDB的時(shí)間類型數(shù)據(jù),小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧
    2018-10-10
  • Java服務(wù)端服務(wù)監(jiān)控:Prometheus與Spring Boot Actuator的集成方式

    Java服務(wù)端服務(wù)監(jiān)控:Prometheus與Spring Boot Actuator的集成方式

    本文介紹了如何將Prometheus與SpringBootActuator集成,實(shí)現(xiàn)對(duì)Java服務(wù)端應(yīng)用的監(jiān)控,通過(guò)集成,可以利用Prometheus的強(qiáng)大監(jiān)控能力,及時(shí)發(fā)現(xiàn)和解決性能問(wèn)題
    2024-12-12
  • Java面向?qū)ο笾b類的用途與實(shí)際使用

    Java面向?qū)ο笾b類的用途與實(shí)際使用

    所謂包裝類,就是能夠直接將簡(jiǎn)單類型的變量表示為一個(gè)類,在執(zhí)行變量類型的相互轉(zhuǎn)換時(shí),我們會(huì)大量使用這些包裝類,本文我們來(lái)深入探索一下Java包裝類的相關(guān)內(nèi)容,需要的朋友可以參考下
    2022-03-03
  • 帶你粗略了解Java數(shù)組的使用

    帶你粗略了解Java數(shù)組的使用

    這篇文章主要給大家介紹了關(guān)于Java中數(shù)組的定義和使用的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-08-08

最新評(píng)論