解决树形结构数据 (有序无序通杀)

  1 package com.study;
  2 
  3 import java.util.ArrayList;
  4 import java.util.HashMap;
  5 import java.util.List;
  6 import java.util.Map;
  7 import java.util.Map.Entry;
  8 
  9 import com.alibaba.fastjson.JSONArray;
 10 import com.alibaba.fastjson.JSONObject;
 11 
 12 public class SteelTree {
 13 
 14     public static void main(String[] args) {
 15         // get datas
 16         List<Map<String, Object>> records = getRecords();
 17 
 18         // Result JSON
 19         JSONObject result = new JSONObject();
 20 
 21         // record temp json
 22         JSONObject recordJson = new JSONObject();
 23 
 24         // Unknown json
 25         JSONObject unknownRecord = new JSONObject();
 26 
 27         // root id
 28         String firstParent = "00000";
 29 
 30         for (int i = 0, l = records.size(); i < l; i++) {
 31             Map<String, Object> record = records.get(i);
 32 
 33             // if parentid is null.
 34             String parentId;
 35             if (record.get("parentid") == null) {
 36                 // TODO
 37                 parentId = "00000";
 38             } else {
 39                 parentId = record.get("parentid").toString();
 40             }
 41 
 42             // set default JSON and childern node
 43             JSONObject node = new JSONObject();
 44             node.put("id", record.get("id").toString());
 45             node.put("name", record.get("name").toString());
 46             node.put("parentid", parentId);
 47             node.put("children", new JSONArray());
 48 
 49             // if root node
 50             if (parentId.equals(firstParent)) {
 51                 result.put(record.get("id").toString(), node);
 52                 recordJson.put(record.get("id").toString(), node);
 53 
 54                 // if parent exist
 55             } else if (recordJson.containsKey(parentId)) {
 56                 // add children
 57                 recordJson.getJSONObject(parentId).getJSONArray("children").add(node);
 58                 recordJson.put(record.get("id").toString(), node);
 59                 // Unknown relation node
 60             } else {
 61                 String nodeId = record.get("id").toString();
 62                 if (unknownRecord.containsKey(parentId)) {
 63                     // add children
 64                     unknownRecord.getJSONObject(parentId).getJSONArray("children").add(node);
 65                     recordJson.put(nodeId, node);
 66                 } else {
 67                     // find subnode
 68                     for (Entry<String, Object> entry : unknownRecord.entrySet()) {
 69                         JSONObject tempNode = (JSONObject) entry.getValue();
 70                         if (tempNode.getString("parentid").equals(nodeId)) {
 71                             node.getJSONArray("children").add(tempNode);
 72                             recordJson.put(tempNode.get("id").toString(), tempNode);
 73                             unknownRecord.remove(tempNode.get("id").toString());
 74                             break;
 75                         }
 76                     }
 77                     unknownRecord.put(nodeId, node);
 78                 }
 79             }
 80         }
 81 
 82         // unknownRecord add to result
 83         // find subnode
 84         for (Entry<String, Object> entry : unknownRecord.entrySet()) {
 85             JSONObject tempNode = (JSONObject) entry.getValue();
 86             String tempNodeId = tempNode.getString("parentid");
 87             if (recordJson.containsKey(tempNodeId)) {
 88                 // add children
 89                 recordJson.getJSONObject(tempNodeId).getJSONArray("children").add(tempNode);
 90             } else {
 91                 // Error node
 92                 System.out.println("========================ERROR>> " + tempNodeId + "\t\t" + tempNode.toString());
 93             }
 94         }
 95         System.out.println(result.toString());
 96     } // End main
 97 
 98     private static List<Map<String, Object>> getRecords() {
 99         List<Map<String, Object>> result = new ArrayList<>();
100 
101         // first record
102         Map<String, Object> red0101 = new HashMap<>();
103         red0101.put("id", "U0003");
104         red0101.put("name", "wangwu");
105         red0101.put("parentid", "U0001");
106         result.add(red0101);
107 
108         Map<String, Object> red010102 = new HashMap<>();
109         red010102.put("id", "U0006");
110         red010102.put("name", "chenba");
111         red010102.put("parentid", "U0003");
112         result.add(red010102);
113 
114         Map<String, Object> red01 = new HashMap<>();
115         red01.put("id", "U0001");
116         red01.put("name", "zhengsan");
117         red01.put("parentid", "00000");
118         result.add(red01);
119 
120         Map<String, Object> red02 = new HashMap<>();
121         red02.put("id", "U0002");
122         red02.put("name", "lisi");
123         red02.put("parentid", "00000");
124         result.add(red02);
125 
126         Map<String, Object> red0102 = new HashMap<>();
127         red0102.put("id", "U0004");
128         red0102.put("name", "zhaolu");
129         red0102.put("parentid", "U0001");
130         result.add(red0102);
131 
132         Map<String, Object> red010101 = new HashMap<>();
133         red010101.put("id", "U0005");
134         red010101.put("name", "maqi");
135         red010101.put("parentid", "U0003");
136         result.add(red010101);
137 
138         return result;
139     }
140 
141 }

 

转载于:https://www.cnblogs.com/xikui/p/11383861.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值