JAVA樹形結構 通用程式碼(高效能)
package com.test.main;
import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
/**
* Created by Administrator on 2018/9/26.
*/
public class TreeToolUtils {
private List<RegionBeanTree> rootList; //根節點物件存放到這裡
private List<RegionBeanTree> bodyList; //其他節點存放到這裡,可以包含根節點
public TreeToolUtils(List<RegionBeanTree> rootList, List<RegionBeanTree> bodyList) {
this.rootList = rootList;
this.bodyList = bodyList;
}
public List<RegionBeanTree> getTree(){ //呼叫的方法入口
if(bodyList != null && !bodyList.isEmpty()){
//宣告一個map,用來過濾已操作過的資料
Map<String,String> map = Maps.newHashMapWithExpectedSize(bodyList.size());
rootList.forEach(beanTree -> getChild(beanTree,map));//傳遞根物件和一個空map
return rootList;
}
return null;
}
public void getChild(RegionBeanTree beanTree,Map<String,String> map){
List<RegionBeanTree> childList = Lists.newArrayList();
bodyList.stream()
.filter(c -> !map.containsKey(c.getCode()))//map內不包含子節點的code
.filter(c ->c.getPid().equals(beanTree.getCode()))//子節點的父id==根節點的code 繼續迴圈
.forEach(c ->{
map.put(c.getCode(),c.getPid());//當前節點code和父節點id
getChild(c,map);//遞迴呼叫
childList.add(c);
});
beanTree.setChildren(childList);
}
public static void main(String[] args){
RegionBeanTree beanTree1 = new RegionBeanTree();
beanTree1.setCode("540000");
beanTree1.setLabel("西藏省");
beanTree1.setPid("100000"); //最高節點
RegionBeanTree beanTree2 = new RegionBeanTree();
beanTree2.setCode("540100");
beanTree2.setLabel("拉薩市");
beanTree2.setPid("540000");
RegionBeanTree beanTree3 = new RegionBeanTree();
beanTree3.setCode("540300");
beanTree3.setLabel("昌都市");
beanTree3.setPid("540000");
RegionBeanTree beanTree4 = new RegionBeanTree();
beanTree4.setCode("540121");
beanTree4.setLabel("林周縣");
beanTree4.setPid("540100");
RegionBeanTree beanTree5 = new RegionBeanTree();
beanTree5.setCode("540121206");
beanTree5.setLabel("阿朗鄉");
beanTree5.setPid("540121");
RegionBeanTree beanTree6 = new RegionBeanTree();
List<RegionBeanTree> rootList = new ArrayList<>();
rootList.add(beanTree1);
List<RegionBeanTree> bodyList = new ArrayList<>();
bodyList.add(beanTree1);
bodyList.add(beanTree2);
bodyList.add(beanTree3);
bodyList.add(beanTree4);
bodyList.add(beanTree5);
TreeToolUtils utils = new TreeToolUtils(rootList,bodyList);
List<RegionBeanTree> result = utils.getTree();
result.get(0);
}
}
類
package com.test.main;
import java.util.List;
public class RegionBeanTree {
private String code ;
private String pid ;
private String label ;
private List<RegionBeanTree> children;
}
一位不知名的大神寫的,收藏下
相關文章
- 樹形結構
- 通用-遞迴樹結構遞迴
- 樹形結構處理
- 七、基本資料結構(樹形結構)資料結構
- markdown樹形結構生成工具
- 資料結構中樹形結構簡介資料結構
- LayUI—tree樹形結構的使用UI
- java架構的程式碼結構Java架構
- VUE 實現 Studio 管理後臺(七):樹形結構,檔案樹,節點樹共用一套程式碼 NodeTreeVue
- 字串陣列轉為樹形結構字串陣列
- Android 多級樹形結構顯示Android
- Linux 下樹形結構的檢視Linux
- 如何在 Laravel 中去構建部門樹形結構 APILaravelAPI
- 將List物件列表轉為樹形結構物件
- 如何快速、且易懂編寫Java遞迴生成樹形選單結構Java遞迴
- 高階資料結構---赫(哈)夫曼樹及java程式碼實現資料結構Java
- 樹結構與Java實現Java
- 資料結構 - 樹,三探之程式碼實現資料結構
- iView元件庫之下拉框dropdown(樹形結構)View元件
- Vue遞迴元件實現樹形結構選單Vue遞迴元件
- 聊聊mysql的樹形結構儲存及查詢MySql
- 編寫高效能的Java程式碼Java
- 在vue專案中使用樹形結構的穿梭框Vue
- 值得了解的九種樹形資料結構 - Franco資料結構
- MySQL怎樣透過Adjacency List儲存樹形結構?MySql
- 樹形結構的選單表設計與查詢
- .NET C#基礎(5):結構體 - 高效能程式碼的基石C#結構體
- Java 樹結構實際應用 二(哈夫曼樹和哈夫曼編碼)Java
- 淺談樹形結構的特性和應用(上):多叉樹,紅黑樹,堆,Trie樹,B樹,B+樹...
- MySql樹形結構(多級選單)查詢設計方案MySql
- Java 樹結構實際應用 四(平衡二叉樹/AVL樹)Java二叉樹
- 樹結構總結
- Java實現遞迴查詢樹結構Java遞迴
- Java資料結構(十五)—— 多路查詢樹Java資料結構
- 前端樹形Tree資料結構使用-🤸🏻♂️各種姿勢總結前端資料結構
- layui 樹形結構刪除沒有確認,原始碼加入confirm確認提示框UI原始碼
- 紅黑樹核心程式碼分析(JAVA)Java
- 【一份程式碼搞定資料結構】紅黑樹(更新中)資料結構