Java - 树状结构数据解析
生活随笔
收集整理的這篇文章主要介紹了
Java - 树状结构数据解析
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
由于工作中好多地方需要樹狀結構數據,在參考了網上遞歸實現和數據庫存儲過程實現,都不太滿意。突然想到zTree也有解析該類數據的要求,所以在閱讀了zTree源碼的前提了,按照他的實現原理,寫了一個java版的實現方案
@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存儲的均為id為key的鍵值對,如果以pid為key可以取出對象,則表明該元素是父級元素if(tmpMap.get(map.get("pid")) != null && (map.get("id") != map.get("pid"))){//給當前這個父級map對象中添加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));//沒有父節(jié)點} else {resultList.add(list.get(i));}}for (int i = 0, l = list.size(); i < l; i++) {System.out.println("原始數據是否變化:" + 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;}
數據庫中的測試數據
解析完成后樹狀結構如下
總結
以上是生活随笔為你收集整理的Java - 树状结构数据解析的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 矩阵分解之: 特征值分解(EVD)、奇异
- 下一篇: windows无法安装到所选位置,请检查