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

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

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

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

java遞歸獲取樹

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

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

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

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

這樣,前端可以利用這棵樹來構(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),寫入當(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;
}



/**
 * 獲取場地樹RVO
 */
public class TreeVo {

    /**
     * ID
     */
    private String id;

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

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

總結(jié)

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

相關(guān)文章

  • SpringBoot 定時任務(wù)遇到的坑

    SpringBoot 定時任務(wù)遇到的坑

    這篇文章主要介紹了SpringBoot 定時任務(wù)遇到的坑,今天踩的這個坑和 cron 表達(dá)式有關(guān),文中給大家介紹了cron 表達(dá)式的解釋,需要的朋友一起看看吧
    2017-11-11
  • 解析JPA的視圖查詢問題

    解析JPA的視圖查詢問題

    這篇文章主要是對JPA的視圖查詢問題進(jìn)行了詳細(xì)的分析介紹,需要的朋友可以過來參考下,希望對大家有所幫助
    2013-12-12
  • 淺析Java中如何處理接口返回的JSON數(shù)據(jù)

    淺析Java中如何處理接口返回的JSON數(shù)據(jù)

    在?Java?里處理接口返回的?JSON,最常用的是?Jackson?或?Gson?這兩個庫,下面小編將用最簡單,最實(shí)用的方式教你,快跟隨小編一起學(xué)習(xí)一下吧
    2026-04-04
  • SpringBoot實(shí)現(xiàn)文件上傳下載的7種方法

    SpringBoot實(shí)現(xiàn)文件上傳下載的7種方法

    文件上傳下載功能是Web應(yīng)用中的常見需求,從簡單的用戶頭像上傳到大型文件的傳輸與共享,都需要可靠的文件處理機(jī)制,下面我們來看看SpringBoot中處理文件上傳下載的7種方法吧
    2025-05-05
  • springboot項(xiàng)目中整合高德地圖的實(shí)踐

    springboot項(xiàng)目中整合高德地圖的實(shí)踐

    這篇文章主要介紹了springboot項(xiàng)目中整合高德地圖的實(shí)踐,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2025-06-06
  • springboot利用redis、Redisson處理并發(fā)問題的操作

    springboot利用redis、Redisson處理并發(fā)問題的操作

    這篇文章主要介紹了springboot利用redis、Redisson處理并發(fā)問題的操作,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-06-06
  • java使用內(nèi)存數(shù)據(jù)庫ssdb的步驟

    java使用內(nèi)存數(shù)據(jù)庫ssdb的步驟

    這篇文章主要介紹了java使用內(nèi)存數(shù)據(jù)庫ssdb的步驟,幫助大家更好的理解和使用Java,感興趣的朋友可以了解下
    2020-12-12
  • dom4j創(chuàng)建和解析xml文檔的實(shí)現(xiàn)方法

    dom4j創(chuàng)建和解析xml文檔的實(shí)現(xiàn)方法

    下面小編就為大家?guī)硪黄猟om4j創(chuàng)建和解析xml文檔的實(shí)現(xiàn)方法。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-06-06
  • Guava中這些Map技巧可以讓代碼量減少了50%

    Guava中這些Map技巧可以讓代碼量減少了50%

    guava提供了非常強(qiáng)大的操作,可以讓我們把java代碼寫的很簡潔,下面這篇文章主要給大家介紹了關(guān)于Guava中這些Map使用技巧可以讓代碼量減少了50%的相關(guān)資料,需要的朋友可以參考下
    2022-11-11
  • java實(shí)現(xiàn)簡單的加減乘除計(jì)算器

    java實(shí)現(xiàn)簡單的加減乘除計(jì)算器

    這篇文章主要為大家詳細(xì)介紹了java實(shí)現(xiàn)簡單的加減乘除計(jì)算器,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-09-09

最新評論

那坡县| 武强县| 温州市| 依兰县| 沽源县| 济宁市| 渝北区| 大厂| 喀喇沁旗| 米脂县| 南皮县| 南江县| 富阳市| 望奎县| 毕节市| 社旗县| 安国市| 广南县| 罗山县| 株洲县| 揭西县| 印江| 云龙县| 米易县| 卓资县| 扎囊县| 磐安县| 揭东县| 罗平县| 徐水县| 读书| 无锡市| 石嘴山市| 新郑市| 桂林市| 达州市| 门头沟区| 隆化县| 临武县| 黔西县| 昔阳县|