使用Java將一個List運用遞歸轉(zhuǎn)成樹形結(jié)構(gòu)案例
在開發(fā)中,我們會遇到將不同組織架構(gòu)合并成tree這種樹狀結(jié)構(gòu),那么如果做呢?
實際上,我們也可以理解為如何將擁有父子關(guān)系的list轉(zhuǎn)成樹形結(jié)構(gòu),而這其中主要的方法就是遞歸!
1、實體對象:
@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 { //把一個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、運行結(jié)果:
這樣list就成功轉(zhuǎn)換成為了tree裝結(jié)構(gòu)
到此這篇關(guān)于使用Java將一個List運用遞歸轉(zhuǎn)成樹形結(jié)構(gòu)案例的文章就介紹到這了,更多相關(guān)Java將list運用成樹形結(jié)構(gòu)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Java mysql詳細(xì)講解雙數(shù)據(jù)源配置使用
在開發(fā)過程中我們常常會用到兩個數(shù)據(jù)庫,一個數(shù)據(jù)用來實現(xiàn)一些常規(guī)的增刪改查,另外一個數(shù)據(jù)庫用來實時存數(shù)據(jù)。進(jìn)行數(shù)據(jù)的統(tǒng)計分析??梢宰x寫分離??梢愿玫膬?yōu)化和提高效率;或者兩個數(shù)據(jù)存在業(yè)務(wù)分離的時候也需要多個數(shù)據(jù)源來實現(xiàn)2022-06-06SpringBoot如何統(tǒng)一處理返回結(jié)果和異常情況
這篇文章主要介紹了SpringBoot如何統(tǒng)一處理返回結(jié)果和異常情況問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-05-05java中java.util.Date和java.sql.Date之間的轉(zhuǎn)換的示例
java.util.Date是java.sql.Date的父類,有時候在和SqlServer數(shù)據(jù)庫打交道時,也會遇到,本文主要介紹了java中java.util.Date和java.sql.Date之間的轉(zhuǎn)換的示例,具有一定的參考價值,感興趣的可以了解一下2024-05-05Spring mvc工作原理_動力節(jié)點Java學(xué)院整理
這篇文章主要為大家詳細(xì)介紹了Spring mvc工作原理的相關(guān)資料,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-08-08Spring?Boot用戶注冊驗證的實現(xiàn)全過程記錄
最近在設(shè)計自己的博客系統(tǒng),涉及到用戶注冊與登錄驗證,所以下面這篇文章主要給大家介紹了關(guān)于Spring?Boot用戶注冊驗證的實現(xiàn)全過程,文中通過實例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-01-01Java對象轉(zhuǎn)JSON時動態(tài)的增刪改查屬性詳解
這篇文章主要介紹了Java對象轉(zhuǎn)JSON時如何動態(tài)的增刪改查屬性的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-11-11