欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java實現(xiàn)公用實體類轉(zhuǎn)Tree結(jié)構(gòu)

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

工具類

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é)點列表
 
    // 構(gòu)造函數(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;
    }
}
 
// 樹構(gòu)建器類,負責從列表構(gòu)建樹形結(jié)構(gòu)
class TreeBuilder<T> {
    // buildTree方法,構(gòu)建樹形結(jié)構(gòu)
    public TreeNode<T> buildTree(List<T> items, Function<T, String> idExtractor, Function<T, String> parentIdExtractor) {
        // 創(chuàng)建一個映射,將每個節(jié)點的ID映射到對應(yīng)的TreeNode對象
        Map<String, TreeNode<T>> nodeMap = items.stream()
                .map(item -> new TreeNode<>(item)) // 將每個元素轉(zhuǎn)換為TreeNode
                .collect(Collectors.toMap(node -> idExtractor.apply(node.getData()), Function.identity()));
 
        TreeNode<T> root = null; // 用于存儲根節(jié)點
        
        // 遍歷每個元素,建立父子關(guān)系
        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; // 假設(shè)只有一個根節(jié)點
            } else {
                TreeNode<T> parentNode = nodeMap.get(parentId); // 獲取父節(jié)點
                if (parentNode != null) {
                    parentNode.addChild(node); // 將當前節(jié)點添加到父節(jié)點的子節(jié)點列表中
                }
            }
        }
        
        return root; // 返回構(gòu)建的樹的根節(jié)點
    }
}

注釋說明:

TreeNode類:

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

TreeBuilder類:

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

代碼示例

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é)點名稱
 
    // 構(gòu)造函數(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)建實體列表,模擬樹形結(jié)構(gòu)
        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)建樹構(gòu)建器實例
        TreeBuilder<Entity> treeBuilder = new TreeBuilder<>();
        
        // 構(gòu)建樹,傳入實體列表及提取ID和父ID的函數(shù)
        TreeNode<Entity> tree = treeBuilder.buildTree(
            entities,
            Entity::getId,        // 提取ID
            Entity::getParentId   // 提取父ID
        );
 
        // 打印樹結(jié)構(gòu)
        printTree(tree, 0);
    }
 
    // 遞歸打印樹結(jié)構(gòu)的輔助方法
    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é)點的構(gòu)造都有注釋,解釋其層級關(guān)系。
  • 構(gòu)建樹的步驟清晰描述,便于理解。

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

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

相關(guān)文章

  • Java e.printStackTrace()案例講解

    Java e.printStackTrace()案例講解

    這篇文章主要介紹了Java e.printStackTrace()案例講解,本篇文章通過簡要的案例,講解了該項技術(shù)的了解與使用,以下就是詳細內(nèi)容,需要的朋友可以參考下
    2021-08-08
  • 詳解MyBatis逆向工程

    詳解MyBatis逆向工程

    本篇文章主要介紹了詳解MyBatis逆向工程,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-01-01
  • mybatis中的字符串拼接問題

    mybatis中的字符串拼接問題

    這篇文章主要介紹了mybatis中的字符串拼接問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-02-02
  • 解決MyBatis中為類配置別名,列名與屬性名不對應(yīng)的問題

    解決MyBatis中為類配置別名,列名與屬性名不對應(yīng)的問題

    這篇文章主要介紹了解決MyBatis中為類配置別名,列名與屬性名不對應(yīng)的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-11-11
  • springboot使用Logback把日志輸出到控制臺或輸出到文件

    springboot使用Logback把日志輸出到控制臺或輸出到文件

    這篇文章給大家介紹springboot項目使用日志工具Logback把日志不僅輸出到控制臺,也可以輸出到文件的操作方法,本文通過實例圖文相結(jié)合給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友參考下吧
    2020-10-10
  • springboot+mybatis+枚舉處理器的實現(xiàn)

    springboot+mybatis+枚舉處理器的實現(xiàn)

    在Spring?boot項目開發(fā)中經(jīng)常遇到需要使用枚舉的場景,本文就介紹了springboot+mybatis+枚舉處理器的實現(xiàn),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-03-03
  • java遍歷讀取整個redis數(shù)據(jù)庫實例

    java遍歷讀取整個redis數(shù)據(jù)庫實例

    這篇文章主要介紹了java遍歷讀取整個redis數(shù)據(jù)庫實例,使用支持正則表達式的key搜索方法jedis.keys(“*”)實現(xiàn),需要的朋友可以參考下
    2014-05-05
  • java計算集合對稱差的示例代碼

    java計算集合對稱差的示例代碼

    本篇文章主要介紹了java計算集合對稱差的示例代碼,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-09-09
  • 手把手教你搞懂冒泡排序和選擇排序

    手把手教你搞懂冒泡排序和選擇排序

    這篇文章主要介紹了java數(shù)組算法例題代碼詳解(冒泡排序,選擇排序),本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-07-07
  • 詳解Java LinkedHashMap與HashMap的使用

    詳解Java LinkedHashMap與HashMap的使用

    這篇文章主要通過幾個示例為大家詳細介紹了Java中LinkedHashMap與HashMap的常見使用和概述,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起學習一下
    2022-10-10

最新評論