使用Java將一個(gè)List運(yùn)用遞歸轉(zhuǎn)成樹形結(jié)構(gòu)案例
在開發(fā)中,我們會(huì)遇到將不同組織架構(gòu)合并成tree這種樹狀結(jié)構(gòu),那么如果做呢?
實(shí)際上,我們也可以理解為如何將擁有父子關(guān)系的list轉(zhuǎn)成樹形結(jié)構(gòu),而這其中主要的方法就是遞歸!
1、實(shí)體對(duì)象:
@Data public class Node { private Integer id; private String city; private Integer pid; private List<Node> children; public Node(Integer id,String city,Integer pid){ this.id = id; this.city = city; this.pid = pid; } }
2、轉(zhuǎn)換工具類:
public class TreeUtils { //把一個(gè)List轉(zhuǎn)成樹 static List<Node> buildTree(List<Node> list,Integer pid){ List<Node> tree=new ArrayList<>(); for(Node node:list){ if(Objects.equals(node.getPid(),pid)){ tree.add(findChild(node,list)); } } return tree; } static Node findChild(Node node, List<Node> list){ for(Node n:list){ if(Objects.equals(n.getPid(),node.getId())){ if(node.getChildren() == null){ node.setChildren(new ArrayList<Node>()); } node.getChildren().add(findChild(n,list)); } } return node; } public static void main(String[] args) { Node node0=new Node(0,"中國",-1); Node node1=new Node(1,"湖北省",0); Node node2=new Node(2,"武漢市",1); Node node3=new Node(3,"洪山區(qū)",2); Node node4=new Node(4,"宜昌市",1); Node node5=new Node(5,"上海市",0); Node node6=new Node(6,"靜安區(qū)",5); List<Node> list=new ArrayList<>(); list.add(node3); list.add(node4); list.add(node1); list.add(node2); list.add(node5); list.add(node6); list.add(node0); List<Node> nodes = buildTree(list,-1); System.out.println(JSON.toJSONString(nodes)); } }
3、運(yùn)行結(jié)果:
這樣list就成功轉(zhuǎn)換成為了tree裝結(jié)構(gòu)
到此這篇關(guān)于使用Java將一個(gè)List運(yùn)用遞歸轉(zhuǎn)成樹形結(jié)構(gòu)案例的文章就介紹到這了,更多相關(guān)Java將list運(yùn)用成樹形結(jié)構(gòu)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- 詳解Java遞歸實(shí)現(xiàn)樹形結(jié)構(gòu)的兩種方式
- Java實(shí)現(xiàn)List集合轉(zhuǎn)樹形結(jié)構(gòu)的示例詳解
- Java實(shí)現(xiàn)樹形結(jié)構(gòu)的示例代碼
- Java樹形結(jié)構(gòu)數(shù)據(jù)生成導(dǎo)出excel文件方法記錄
- JAVA如何把數(shù)據(jù)庫的數(shù)據(jù)處理成樹形結(jié)構(gòu)
- Java 遞歸查詢部門樹形結(jié)構(gòu)數(shù)據(jù)的實(shí)踐
- java+vue3+el-tree實(shí)現(xiàn)樹形結(jié)構(gòu)操作代碼
相關(guān)文章
使用maven插件對(duì)java工程進(jìn)行打包過程解析
這篇文章主要介紹了使用maven插件對(duì)java工程進(jìn)行打包過程解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-08-08一文詳解Java如何優(yōu)雅地判斷對(duì)象是否為空
這篇文章主要給大家介紹了關(guān)于Java如何優(yōu)雅地判斷對(duì)象是否為空的相關(guān)資料,在Java中可以使用以下方法優(yōu)雅地判斷一個(gè)對(duì)象是否為空,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下2024-04-04Java mysql詳細(xì)講解雙數(shù)據(jù)源配置使用
在開發(fā)過程中我們常常會(huì)用到兩個(gè)數(shù)據(jù)庫,一個(gè)數(shù)據(jù)用來實(shí)現(xiàn)一些常規(guī)的增刪改查,另外一個(gè)數(shù)據(jù)庫用來實(shí)時(shí)存數(shù)據(jù)。進(jìn)行數(shù)據(jù)的統(tǒng)計(jì)分析。可以讀寫分離??梢愿玫膬?yōu)化和提高效率;或者兩個(gè)數(shù)據(jù)存在業(yè)務(wù)分離的時(shí)候也需要多個(gè)數(shù)據(jù)源來實(shí)現(xiàn)2022-06-06SpringBoot如何統(tǒng)一處理返回結(jié)果和異常情況
這篇文章主要介紹了SpringBoot如何統(tǒng)一處理返回結(jié)果和異常情況問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-05-05java中java.util.Date和java.sql.Date之間的轉(zhuǎn)換的示例
java.util.Date是java.sql.Date的父類,有時(shí)候在和SqlServer數(shù)據(jù)庫打交道時(shí),也會(huì)遇到,本文主要介紹了java中java.util.Date和java.sql.Date之間的轉(zhuǎn)換的示例,具有一定的參考價(jià)值,感興趣的可以了解一下2024-05-05Spring mvc工作原理_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理
這篇文章主要為大家詳細(xì)介紹了Spring mvc工作原理的相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-08-08Mybatis實(shí)現(xiàn)分頁的注意點(diǎn)
Mybatis提供了強(qiáng)大的分頁攔截實(shí)現(xiàn),可以完美的實(shí)現(xiàn)分功能。下面小編給大家分享小編在使用攔截器給mybatis進(jìn)行分頁所遇到的問題及注意點(diǎn),需要的朋友一起看看吧2017-07-07Spring?Boot用戶注冊(cè)驗(yàn)證的實(shí)現(xiàn)全過程記錄
最近在設(shè)計(jì)自己的博客系統(tǒng),涉及到用戶注冊(cè)與登錄驗(yàn)證,所以下面這篇文章主要給大家介紹了關(guān)于Spring?Boot用戶注冊(cè)驗(yàn)證的實(shí)現(xiàn)全過程,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-01-01Java對(duì)象轉(zhuǎn)JSON時(shí)動(dòng)態(tài)的增刪改查屬性詳解
這篇文章主要介紹了Java對(duì)象轉(zhuǎn)JSON時(shí)如何動(dòng)態(tài)的增刪改查屬性的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-11-11