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

Java實現(xiàn)公用實體類轉Tree結構

 更新時間:2024年10月28日 11:30:48   作者:小信丶  
這篇文章主要為大家介紹了一個Java工具類,可以實現(xiàn)Java公用實體類轉Tree結構,文中的示例代碼簡潔易懂,感興趣的小伙伴可以參考一下

工具類

import java.util.*;
import java.util.function.Function;
import java.util.stream.Collectors;
 
// 樹節(jié)點類,用于存儲樹中的每個元素
class TreeNode<T> {
    private T data; // 節(jié)點存儲的數(shù)據(jù)
    private List<TreeNode<T>> children = new ArrayList<>(); // 子節(jié)點列表
 
    // 構造函數(shù),初始化節(jié)點數(shù)據(jù)
    public TreeNode(T data) {
        this.data = data;
    }
 
    // 添加子節(jié)點
    public void addChild(TreeNode<T> child) {
        children.add(child);
    }
 
    // 獲取當前節(jié)點的數(shù)據(jù)
    public T getData() {
        return data;
    }
 
    // 獲取當前節(jié)點的所有子節(jié)點
    public List<TreeNode<T>> getChildren() {
        return children;
    }
}
 
// 樹構建器類,負責從列表構建樹形結構
class TreeBuilder<T> {
    // buildTree方法,構建樹形結構
    public TreeNode<T> buildTree(List<T> items, Function<T, String> idExtractor, Function<T, String> parentIdExtractor) {
        // 創(chuàng)建一個映射,將每個節(jié)點的ID映射到對應的TreeNode對象
        Map<String, TreeNode<T>> nodeMap = items.stream()
                .map(item -> new TreeNode<>(item)) // 將每個元素轉換為TreeNode
                .collect(Collectors.toMap(node -> idExtractor.apply(node.getData()), Function.identity()));
 
        TreeNode<T> root = null; // 用于存儲根節(jié)點
        
        // 遍歷每個元素,建立父子關系
        for (T item : items) {
            String id = idExtractor.apply(item); // 獲取當前節(jié)點的ID
            String parentId = parentIdExtractor.apply(item); // 獲取父節(jié)點的ID
            TreeNode<T> node = nodeMap.get(id); // 獲取當前節(jié)點
            
            if (parentId == null) {
                root = node; // 假設只有一個根節(jié)點
            } else {
                TreeNode<T> parentNode = nodeMap.get(parentId); // 獲取父節(jié)點
                if (parentNode != null) {
                    parentNode.addChild(node); // 將當前節(jié)點添加到父節(jié)點的子節(jié)點列表中
                }
            }
        }
        
        return root; // 返回構建的樹的根節(jié)點
    }
}

注釋說明:

TreeNode類:

  • 每個字段和方法都有注釋,說明其用途。
  • 包含構造函數(shù)、添加子節(jié)點的方法以及獲取數(shù)據(jù)和子節(jié)點的方法。

TreeBuilder類:

  • buildTree方法的邏輯注釋清晰,解釋了每一步的目的。
  • 使用映射將每個實體轉換為樹節(jié)點,并建立父子關系。

代碼示例

import java.util.Arrays;
import java.util.List;
 
// 實體類,用于表示樹節(jié)點的數(shù)據(jù)
class Entity {
    private String id;         // 節(jié)點ID
    private String parentId;   // 父節(jié)點ID
    private String name;       // 節(jié)點名稱
 
    // 構造函數(shù)
    public Entity(String id, String parentId, String name) {
        this.id = id;
        this.parentId = parentId;
        this.name = name;
    }
 
    // 獲取節(jié)點ID
    public String getId() {
        return id;
    }
 
    // 獲取父節(jié)點ID
    public String getParentId() {
        return parentId;
    }
 
    // 獲取節(jié)點名稱
    public String getName() {
        return name;
    }
}
 
// 主程序
public class Main {
    public static void main(String[] args) {
        // 創(chuàng)建實體列表,模擬樹形結構
        List<Entity> entities = Arrays.asList(
            new Entity("1", null, "Root"),         // 根節(jié)點
            new Entity("2", "1", "Child 1"),       // Child 1, 父節(jié)點為Root
            new Entity("3", "1", "Child 2"),       // Child 2, 父節(jié)點為Root
            new Entity("4", "2", "Grandchild 1")   // Grandchild 1, 父節(jié)點為Child 1
        );
 
        // 創(chuàng)建樹構建器實例
        TreeBuilder<Entity> treeBuilder = new TreeBuilder<>();
        
        // 構建樹,傳入實體列表及提取ID和父ID的函數(shù)
        TreeNode<Entity> tree = treeBuilder.buildTree(
            entities,
            Entity::getId,        // 提取ID
            Entity::getParentId   // 提取父ID
        );
 
        // 打印樹結構
        printTree(tree, 0);
    }
 
    // 遞歸打印樹結構的輔助方法
    private static void printTree(TreeNode<Entity> node, int level) {
        if (node == null) return; // 如果節(jié)點為空,直接返回
 
        // 打印當前節(jié)點的名稱,縮進顯示層級
        System.out.println("  ".repeat(level) + node.getData().getName());
        
        // 遞歸打印所有子節(jié)點
        for (TreeNode<Entity> child : node.getChildren()) {
            printTree(child, level + 1);
        }
    }
}

代碼注釋說明:

Entity類:每個字段和方法都有注釋,說明其用途和功能。

Main類

  • 實體列表中每個節(jié)點的構造都有注釋,解釋其層級關系。
  • 構建樹的步驟清晰描述,便于理解。

printTree方法:詳細說明其遞歸邏輯和輸出格式。

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

相關文章

  • Java復制(拷貝)數(shù)組的4種方法:arraycopy()方法、clone() 方法、copyOf()和copyOfRan

    Java復制(拷貝)數(shù)組的4種方法:arraycopy()方法、clone() 方法、copyOf()和copyOfRa

    這篇文章主要介紹了Java復制(拷貝)數(shù)組的4種方法:arraycopy()方法、clone() 方法、copyOf()和copyOfRan,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-01-01
  • springboot之自動裝配全過程

    springboot之自動裝配全過程

    這篇文章主要介紹了springboot之自動裝配全過程,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-08-08
  • Spring核心IoC容器的依賴注入接口和層級包命名規(guī)范

    Spring核心IoC容器的依賴注入接口和層級包命名規(guī)范

    這篇文章主要介紹了Spring核心IoC容器的依賴注入接口和層級包命名規(guī)范,IOC又名控制反轉,把對象創(chuàng)建和對象之間的調用過程,交給Spring進行管理,目的是為了降低耦合度,需要的朋友可以參考下
    2023-05-05
  • MyBatis入門初體驗之使用大全(2)

    MyBatis入門初體驗之使用大全(2)

    這篇文章主要介紹了MyBatis入門初體驗之使用大全(2)的相關資料,非常不錯,具有參考借鑒價值,需要的朋友可以參考下
    2016-07-07
  • 基于線程池的工作原理與源碼解讀

    基于線程池的工作原理與源碼解讀

    下面小編就為大家分享一篇基于線程池的工作原理與源碼解讀,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2017-12-12
  • SpringBoot中的PropertySource原理詳解

    SpringBoot中的PropertySource原理詳解

    這篇文章主要介紹了SpringBoot中的PropertySource原理詳解,PropertySource?是一個非常重要的概念,它允許您在應用程序中定義屬性,并將這些屬性注入到?Spring?環(huán)境中,需要的朋友可以參考下
    2023-07-07
  • 使用synchronized關鍵字實現(xiàn)信號量的方法

    使用synchronized關鍵字實現(xiàn)信號量的方法

    在Java中,信號量(Semaphore)是一種常用的同步工具,它可以用來控制對共享資源的訪問數(shù)量,下面,我們將使用Synchronized關鍵字來實現(xiàn)一個簡單的信號量,我們的目標是實現(xiàn)一個計數(shù)信號量,其中信號量的計數(shù)指示可以同時訪問某一資源的線程數(shù),需要的朋友可以參考下
    2024-04-04
  • springboot themaleaf 第一次進頁面不加載css的問題

    springboot themaleaf 第一次進頁面不加載css的問題

    這篇文章主要介紹了springboot themaleaf 第一次進頁面不加載css的問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-10-10
  • Java關于MyBatis緩存詳解

    Java關于MyBatis緩存詳解

    緩存的重要性是不言而喻的,使用緩存,我們可以避免頻繁的與數(shù)據(jù)庫進行交互,尤其是在查詢越多、緩存命中率越高的情況下,使用緩存對性能的提高更明顯。本文將給大家詳細的介紹,對大家的學習或工作具有一定的參考借鑒價值
    2021-09-09
  • Java操作數(shù)據(jù)庫(行級鎖,for update)

    Java操作數(shù)據(jù)庫(行級鎖,for update)

    這篇文章主要介紹了Java操作數(shù)據(jù)庫(行級鎖,for update),文章圍繞Java操作數(shù)據(jù)庫的相關資料展開詳細內容,需要的小伙伴可以參考一下,希望對你有所幫助
    2021-12-12

最新評論

文山县| 六枝特区| 通州区| 遂宁市| 朝阳区| 泰兴市| 濮阳县| 和田县| 西乌| 凤山市| 游戏| 靖江市| 双城市| 邳州市| 夏津县| 淳化县| 衡阳市| 西峡县| 剑阁县| 含山县| 抚松县| 汽车| 日喀则市| 湘西| 龙南县| 侯马市| 奎屯市| 万州区| 尤溪县| 乌拉特中旗| 滨州市| 曲阜市| 广平县| 仁化县| 河北省| 鲁山县| 阿克陶县| 贡山| 五大连池市| 西峡县| 剑河县|