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;
}
一位不知名的大神寫的,收藏下
相關文章
- java樹形結構Java
- 樹形結構
- 通用-遞迴樹結構遞迴
- layui樹形結構UI
- 100 行 C 程式碼終端列印樹形結構
- 樹形結構處理
- 七、基本資料結構(樹形結構)資料結構
- markdown樹形結構生成工具
- 如何在Java中返回樹形結構 最佳實踐Java
- 資料結構之通用樹結構的實現資料結構
- 資料結構中樹形結構簡介資料結構
- LayUI—tree樹形結構的使用UI
- Linux用樹形結構顯示目錄結構Linux
- 字串陣列轉為樹形結構字串陣列
- php tree類的使用(樹形結構)PHP
- [Swing]樹形結構的實現
- 一個簡單的樹形結構
- java架構的程式碼結構Java架構
- 樹形結構資料儲存方案(四):左右值編碼
- 關於一個樹狀結構的通用類
- VUE 實現 Studio 管理後臺(七):樹形結構,檔案樹,節點樹共用一套程式碼 NodeTreeVue
- 如何在 Laravel 中去構建部門樹形結構 APILaravelAPI
- Linux 下樹形結構的檢視Linux
- 將List物件列表轉為樹形結構物件
- Android 多級樹形結構顯示Android
- 樹形結構的儲存與查詢
- Oracle 樹形結構查詢的特殊用法Oracle
- 28款jQuery Tree 樹形結構外掛jQuery
- 使用遞迴演算法結合資料庫解析成java樹形結構遞迴演算法資料庫Java
- 如何快速、且易懂編寫Java遞迴生成樹形選單結構Java遞迴
- 樹結構與Java實現Java
- 我做的一個挺拙劣樹形結構
- 樹形結構的處理——組合模式(五)模式
- 樹形結構的處理——組合模式(四)模式
- 樹形結構的處理——組合模式(三)模式
- 樹形結構的處理——組合模式(二)模式
- 樹形結構的處理——組合模式(一)模式
- javascript樹形總結JavaScript