Java - 树状结构数据解析
生活随笔
收集整理的這篇文章主要介紹了
Java - 树状结构数据解析
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
由于工作中好多地方需要樹(shù)狀結(jié)構(gòu)數(shù)據(jù),在參考了網(wǎng)上遞歸實(shí)現(xiàn)和數(shù)據(jù)庫(kù)存儲(chǔ)過(guò)程實(shí)現(xiàn),都不太滿意。突然想到zTree也有解析該類數(shù)據(jù)的要求,所以在閱讀了zTree源碼的前提了,按照他的實(shí)現(xiàn)原理,寫(xiě)了一個(gè)java版的實(shí)現(xiàn)方案
@SuppressWarnings("unchecked")public List<Map<String, Object>> parseTree(List<Map<String, Object>> list) {List<Map<String, Object>> resultList = new ArrayList<Map<String, Object>>();Map<String, Object> tmpMap = new HashMap<String, Object>();for (int i = 0, l = list.size(); i < l; i++) {tmpMap.put(String.valueOf(list.get(i).get("id")), list.get(i));}for (int i = 0, l = list.size(); i < l; i++) {Map<String, Object> map = list.get(i);//tmpMap存儲(chǔ)的均為id為key的鍵值對(duì),如果以pid為key可以取出對(duì)象,則表明該元素是父級(jí)元素if(tmpMap.get(map.get("pid")) != null && (map.get("id") != map.get("pid"))){//給當(dāng)前這個(gè)父級(jí)map對(duì)象中添加key為children的ArrayListif ((tmpMap.get(map.get("pid")) != null) && ((Map<String, Object>) tmpMap.get(map.get("pid"))).get("children") == null) {((Map<String,Object>) tmpMap.get(map.get("pid"))).put("children", new ArrayList<Map<String, Object>>());}Map<String, Object> tmap = (Map<String, Object>) tmpMap.get(map.get("pid"));ArrayList<Map<String, Object>> tArrayList = (ArrayList<Map<String, Object>>) tmap.get("children");tArrayList.add(list.get(i));//沒(méi)有父節(jié)點(diǎn)} else {resultList.add(list.get(i));}}for (int i = 0, l = list.size(); i < l; i++) {System.out.println("原始數(shù)據(jù)是否變化:" + list.get(i));}Iterator<Entry<String, Object>> iterator = tmpMap.entrySet().iterator();while (iterator.hasNext()) {Entry<String, Object> entry = iterator.next();System.out.println("遍歷之后:" + entry.getKey() + ":" + entry.getValue());}return resultList;}
數(shù)據(jù)庫(kù)中的測(cè)試數(shù)據(jù)
解析完成后樹(shù)狀結(jié)構(gòu)如下
總結(jié)
以上是生活随笔為你收集整理的Java - 树状结构数据解析的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 矩阵分解之: 特征值分解(EVD)、奇异
- 下一篇: Java单元测试实践-01.单元测试概述