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

Java實現(xiàn)List集合轉(zhuǎn)樹形結(jié)構(gòu)的示例詳解

 更新時間:2022年08月18日 09:08:43   作者:Zz要變強  
在開發(fā)中,我們通常需要將從數(shù)據(jù)庫中查詢的集合數(shù)據(jù)轉(zhuǎn)換成類似文件系統(tǒng)一樣的樹形集合。本文將利用Java語言實現(xiàn)這一功能,感興趣的可以了解一下

在開發(fā)中,我們通常需要將從數(shù)據(jù)庫中查詢的集合數(shù)據(jù)轉(zhuǎn)換成類似文件系統(tǒng)一樣的樹形集合,比如:省市單位,部門機構(gòu),書籍分類等

TreeNode對象

@Data
@AllArgsConstructor
@NoArgsConstructor
public class TreeNode {
    /**
     * 節(jié)點內(nèi)碼
     */
    private Long id;
    /**
     * 節(jié)點名稱
     */
    private String label;
    /**
     * 父節(jié)點內(nèi)碼
     */
    private Long pid;
    /**
     * 子節(jié)點集合
     */
    private List<TreeNode> children;
}

轉(zhuǎn)換工具類

方式一:foreach遍歷

對所傳遞的treeList進行遍歷,然后判斷該節(jié)點的父id與傳遞的id是否相同,相同則遞歸設(shè)置其孩子節(jié)點,并將該節(jié)點的放入children集合中,用于統(tǒng)一返回父節(jié)點相同的所有TreeNode對象。

方式二:stream流

基于?lter()實現(xiàn)數(shù)據(jù)過濾

該方法會接收一個返回boolean的函數(shù)作為參數(shù),終返回一個包括所有符合條件元素的流。

基于map()對元素進行轉(zhuǎn)換

它接收一個函數(shù)作為方法參數(shù),這個函數(shù)會被應(yīng)用到集合中每一個 元素上,并終將其映射為一個新的元素。

對集合中的元素進行過濾,通過filter將父id相同的所有節(jié)點過濾出來,然后在map中遞歸設(shè)置其孩子節(jié)點,并返回。

public class List2TreeList {
 
    //方式一:  使用foreach轉(zhuǎn)換
    public static List<TreeNode> buildTreeUseList(List<TreeNode> treeList,long id){
        //收集傳遞的集合中父id相同的TreeNode
        List<TreeNode> children = new ArrayList<>();
        for (TreeNode treeNode : treeList) {
            //判斷該節(jié)點的父id,是否與傳入的父id相同,相同則遞歸設(shè)置其孩子節(jié)點,并將該節(jié)點放入children集合中
            if(treeNode.getPid() == id){
                //遞歸設(shè)置其孩子節(jié)點
                treeNode.setChildren(buildTreeUseList(treeList, treeNode.getId()));
                //放入children集合
                children.add(treeNode);
            }
        }
        return children;
    }
 
    //方式二:  使用stream流轉(zhuǎn)換
    public static List<TreeNode> buildTreeUseStream(List<TreeNode> treeList,long id){
        List<TreeNode> list = treeList.stream()
                //過濾父節(jié)點與傳遞的id相同的TreeNode對象
                .filter( treeNode -> treeNode.getPid().longValue() == id )
                .map( treeNode -> {
                    //遞歸設(shè)置孩子節(jié)點
                    treeNode.setChildren(buildTreeUseStream(treeList,treeNode.getId()));
                    return treeNode;
                })
                .collect(Collectors.toList());
        return list;
    }
}

功能測試

傳入集合數(shù)據(jù)及最高節(jié)點的父id進行轉(zhuǎn)換

@RestController
public class TestController {
 
    @GetMapping("/treeList")
    public List<TreeNode> convert2Tree(){
        List<TreeNode> list = new ArrayList<>();
        list.add(new TreeNode(370000l,"山東省",0l,null));
        list.add(new TreeNode(370100l,"濟南市",370000l,null));
        list.add(new TreeNode(370200l,"青島市",370000l,null));
        list.add(new TreeNode(370300l,"淄博市",370000l,null));
        list.add(new TreeNode(371300l,"臨沂市",370000l,null));
        list.add(new TreeNode(370102l,"歷下區(qū)",370100l,null));
        list.add(new TreeNode(370103l,"市中區(qū)",370100l,null));
        list.add(new TreeNode(370202l,"市南區(qū)",370200l,null));
        //使用list轉(zhuǎn)換
        List<TreeNode> treeList = List2TreeList.buildTreeUseList(list, 0l);
        System.out.println(treeList);
        return treeList;
    }
}

TreeList結(jié)果格式

轉(zhuǎn)換后的集合數(shù)據(jù)格式

[
    {
        "id": 370000,
        "label": "山東省",
        "pid": 0,
        "children": [
            {
                "id": 370100,
                "label": "濟南市",
                "pid": 370000,
                "children": [
                    {
                        "id": 370102,
                        "label": "歷下區(qū)",
                        "pid": 370100,
                        "children": []
                    },
                    {
                        "id": 370103,
                        "label": "市中區(qū)",
                        "pid": 370100,
                        "children": []
                    }
                ]
            },
            {
                "id": 370200,
                "label": "青島市",
                "pid": 370000,
                "children": [
                    {
                        "id": 370202,
                        "label": "市南區(qū)",
                        "pid": 370200,
                        "children": []
                    }
                ]
            },
            {
                "id": 370300,
                "label": "淄博市",
                "pid": 370000,
                "children": []
            },
            {
                "id": 371300,
                "label": "臨沂市",
                "pid": 370000,
                "children": []
            }
        ]
    }
]

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

相關(guān)文章

  • Spring Web MVC和Hibernate的集成配置詳解

    Spring Web MVC和Hibernate的集成配置詳解

    這篇文章主要介紹了Spring Web MVC和Hibernate的集成配置詳解,具有一定借鑒價值,需要的朋友可以參考下
    2017-12-12
  • Java遍歷Json中的key和value問題

    Java遍歷Json中的key和value問題

    這篇文章主要介紹了Java遍歷Json中的key和value問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-11-11
  • Java?Lambda表達式常用的函數(shù)式接口

    Java?Lambda表達式常用的函數(shù)式接口

    這篇文章主要介紹了Java?Lambda表達式常用的函數(shù)式接口,文章基于Java?Lambda表達式展開對常用的函數(shù)式接口的介紹,具有一的的參考價值需要的小伙伴可以參考一下
    2022-04-04
  • SpringBoot自動配置原理及案例源碼解析

    SpringBoot自動配置原理及案例源碼解析

    這篇文章主要為大家介紹了SpringBoot自動配置原理及自動配置案例源碼解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-11-11
  • 使用Postman傳遞arraylist數(shù)據(jù)給springboot方式

    使用Postman傳遞arraylist數(shù)據(jù)給springboot方式

    這篇文章主要介紹了使用Postman傳遞arraylist數(shù)據(jù)給springboot方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-12-12
  • Java 8中字符串拼接新姿勢StringJoiner詳解

    Java 8中字符串拼接新姿勢StringJoiner詳解

    在本篇文章里小編給大家整理了關(guān)于Java 8中字符串拼接新姿勢StringJoiner的詳解內(nèi)容,需要的朋友們參考下。
    2019-09-09
  • scala中的隱式類型轉(zhuǎn)換的實現(xiàn)

    scala中的隱式類型轉(zhuǎn)換的實現(xiàn)

    這篇文章主要介紹了scala中的隱式類型轉(zhuǎn)換的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-06-06
  • Java向上轉(zhuǎn)型和向下轉(zhuǎn)型的區(qū)別說明

    Java向上轉(zhuǎn)型和向下轉(zhuǎn)型的區(qū)別說明

    這篇文章主要介紹了Java向上轉(zhuǎn)型和向下轉(zhuǎn)型的區(qū)別說明,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-06-06
  • 如何優(yōu)雅的進行Spring整合MongoDB詳解

    如何優(yōu)雅的進行Spring整合MongoDB詳解

    這篇文章主要給大家介紹了如何優(yōu)雅的進行Spring整合MongoDB的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。
    2018-02-02
  • Java利用遺傳算法求解最短路徑問題

    Java利用遺傳算法求解最短路徑問題

    遺傳算法(Genetic Algorithm,GA)最早是由美國的John holland于20世紀70年代提出,該算法是根據(jù)大自然中生物體進化規(guī)律而設(shè)計提出的。本文將利用遺傳算法求解最短路徑問題,需要的可以參考一下
    2022-06-06

最新評論