本文展示了两个实现方法的代码。两个代码的实现方法不同,代码2更为简单。

先看一下最后实现的结果:

最后结果-json

代码1:

实现过程:

1.传入一段json字符串

2.将字符串转换成对象存入节点列表

3.根据节点列表构造无序的多叉树,并将个孩子节点加入对应的父节点中,将无对应父节点的节点加入一级节点列表

4.排序

代码:

  1. package com.example.rabbitmq2;
  2.  
  3. import com.alibaba.fastjson.JSON;
  4. import com.alibaba.fastjson.JSONArray;
  5. import com.alibaba.fastjson.JSONObject;
  6.  
  7. import java.util.*;
  8.  
  9. public class MultipleTree {
  10. public static void main(String[] args) {
  11.  
  12. /**
  13. * 读取层次数据结果集列表
  14. */
  15. String strJson ="[\n" +"" +
  16. " {\n" +
  17. " \"id\":50090113,\n" +
  18. " \"parentId\":50000001,\n" +
  19. " \"name\":\"应用技术研发二中心\",\n" +
  20. " \"status\":0, \n" +
  21. " \"fullName\":\"应用技术研发二中心\"\n" +
  22. " },\n" +
  23. " {\n" +
  24. " \"id\":50090193,\n" +
  25. " \"parentId\":50000000,\n" +
  26. " \"name\":\"应用技术研发一中心\",\n" +
  27. " \"status\":0, \n" +
  28. " \"fullName\":\"应用技术研发一中心\"\n" +
  29. " },\n" +
  30. " {\n" +
  31. " \"id\":50090194,\n" +
  32. " \"parentId\":50090193,\n" +
  33. " \"name\":\"前端研发部\",\n" +
  34. " \"status\":0,\n" +
  35. " \"fullName\":\"应用技术研发一中心/前端研发部\"\n" +
  36. " },\n" +
  37. " {\n" +
  38. " \"id\":50005413,\n" +
  39. " \"parentId\":50090194,\n" +
  40. " \"name\":\"安全网关产品前端研发组\",\n" +
  41. " \"status\":1,\n" +
  42. " \"fullName\":\"应用技术研发中心/前端研发部/安全网关产品前端研发组\"\n" +
  43. " },\n" +
  44. " {\n" +
  45. " \"id\":50005415,\n" +
  46. " \"parentId\":50090194,\n" +
  47. " \"name\":\"前端研发二组\",\n" +
  48. " \"status\":1,\n" +
  49. " \"fullName\":\"应用技术研发中心/前端研发部/前端研发二组\"\n" +
  50. " },\n" +
  51. " {\n" +
  52. " \"id\":50090199,\n" +
  53. " \"parentId\":50090194,\n" +
  54. " \"name\":\"云安全前端研发组\",\n" +
  55. " \"status\":1,\n" +
  56. " \"fullName\":\"应用技术研发中心/前端研发部/云安全前端研发组\"\n" +
  57. " },\n" +
  58. " {\n" +
  59. " \"id\":50090200,\n" +
  60. " \"parentId\":50090194,\n" +
  61. " \"name\":\"威胁情报前端研发组\",\n" +
  62. " \"status\":1,\n" +
  63. " \"fullName\":\"应用技术研发中心/前端研发部/威胁情报前端研发组\"\n" +
  64. " },\n" +
  65. " {\n" +
  66. " \"id\":50090201,\n" +
  67. " \"parentId\":50090194,\n" +
  68. " \"name\":\"大数据与安全运营前端产品组\",\n" +
  69. " \"status\":1,\n" +
  70. " \"fullName\":\"应用技术研发中心/前端研发部/大数据与安全运营前端产品组\"\n" +
  71. " \n" +
  72. " },\n" +
  73. " {\n" +
  74. " \"id\":50090202,\n" +
  75. " \"parentId\":50090194,\n" +
  76. " \"name\":\"大数据与安全运营前端架构组\",\n" +
  77. " \"status\":1,\n" +
  78. " \"fullName\":\"应用技术研发中心/前端研发部/大数据与安全运营前端架构组\"\n" +
  79. " \n" +
  80. " },\n" +
  81. " {\n" +
  82. " \"id\":50090203,\n" +
  83. " \"parentId\":50090194,\n" +
  84. " \"name\":\"大数据与安全运营前端研发二组\",\n" +
  85. " \"status\":1,\n" +
  86. " \n" +
  87. " \"fullName\":\"应用技术研发中心/前端研发部/大数据与安全运营前端研发二组\"\n" +
  88. " },\n" +
  89. " {\n" +
  90. " \"id\":50090204,\n" +
  91. " \"parentId\":50090194,\n" +
  92. " \"name\":\"大数据与安全运营前端研发三组\",\n" +
  93. " \"status\":1,\n" +
  94. " \"fullName\":\"应用技术研发中心/前端研发部/大数据与安全运营前端研发三组\"\n" +
  95. "\n" +
  96. " },\n" +
  97. " {\n" +
  98. " \"id\":50090205,\n" +
  99. " \"parentId\":50090194,\n" +
  100. " \"name\":\"大数据与安全运营前端研发四组\",\n" +
  101. " \"status\":1,\n" +
  102. " \n" +
  103. " \"fullName\":\"应用技术研发中心/前端研发部/大数据与安全运营前端研发四组\"\n" +
  104. "\n" +
  105. " },\n" +
  106. " {\n" +
  107. " \"id\":50090206,\n" +
  108. " \"parentId\":50090194,\n" +
  109. " \"name\":\"大数据与安全运营前端研发运营商部\",\n" +
  110. " \"status\":1,\n" +
  111. " \n" +
  112. " \"fullName\":\"应用技术研发中心/前端研发部/大数据与安全运营前端研发运营商部\"\n" +
  113. "\n" +
  114. " },\n" +
  115. " {\n" +
  116. " \"id\":50090207,\n" +
  117. " \"parentId\":50090194,\n" +
  118. " \"name\":\"大数据与安全运营前端研发政企部\",\n" +
  119. " \"status\":1, \n" +
  120. " \"fullName\":\"应用技术研发中心/前端研发部/大数据与安全运营前端研发政企部\"\n" +
  121. " },\n" +
  122. " {\n" +
  123. " \"id\":50090208,\n" +
  124. " \"parentId\":50090194,\n" +
  125. " \"name\":\"态势感知前端研发组\",\n" +
  126. " \"status\":1,\n" +
  127. " \"fullName\":\"应用技术研发中心/前端研发部/态势感知前端研发组\"\n" +
  128. " },\n" +
  129. " {\n" +
  130. " \"id\":50090209,\n" +
  131. " \"parentId\":50090194,\n" +
  132. " \"name\":\"大数据应用前端研发组\",\n" +
  133. " \"status\":1,\n" +
  134. " \"fullName\":\"应用技术研发中心/前端研发部/大数据应用前端研发组\"\n" +
  135. " },\n" +
  136. " {\n" +
  137. " \"id\":50090210,\n" +
  138. " \"parentId\":50090194,\n" +
  139. " \"name\":\"大数据与威胁分析前端研发一组\",\n" +
  140. " \"status\":1,\n" +
  141. " \"fullName\":\"应用技术研发中心/前端研发部/大数据与威胁分析前端研发一组\"\n" +
  142. " },\n" +
  143. " {\n" +
  144. " \"id\":50090211,\n" +
  145. " \"parentId\":50090194,\n" +
  146. " \"name\":\"大数据与威胁公司前端研发二组\",\n" +
  147. " \"status\":1,\n" +
  148. " \"fullName\":\"应用技术研发中心/前端研发部/大数据与威胁公司前端研发二组\"\n" +
  149. " },\n" +
  150. " {\n" +
  151. " \"id\":50090212,\n" +
  152. " \"parentId\":50090194,\n" +
  153. " \"name\":\"大数据与威胁分析前端研发三组\",\n" +
  154. " \"status\":1,\n" +
  155. " \"fullName\":\"应用技术研发中心/前端研发部/大数据与威胁分析前端研发三组\"\n" +
  156. " },\n" +
  157. " {\n" +
  158. " \"id\":50090213,\n" +
  159. " \"parentId\":50090194,\n" +
  160. " \"name\":\"工业安全前端研发组\",\n" +
  161. " \"status\":1,\n" +
  162. " \"fullName\":\"应用技术研发中心/前端研发部/工业安全前端研发组\"\n" +
  163. " },\n" +
  164. " {\n" +
  165. " \"id\":50090214,\n" +
  166. " \"parentId\":50090194,\n" +
  167. " \"name\":\"行为安全前端研发组\",\n" +
  168. " \"status\":1,\n" +
  169. " \"fullName\":\"应用技术研发中心/前端研发部/行为安全前端研发组\"\n" +
  170. " },\n" +
  171. " {\n" +
  172. " \"id\":50090215,\n" +
  173. " \"parentId\":50090194,\n" +
  174. " \"name\":\"基础大数据前端研发组\",\n" +
  175. " \"status\":1,\n" +
  176. " \"fullName\":\"应用技术研发中心/前端研发部/基础大数据前端研发组\"\n" +
  177. " },\n" +
  178. " {\n" +
  179. " \"id\":50090216,\n" +
  180. " \"parentId\":50090194,\n" +
  181. " \"name\":\"应用产品前端研发组\",\n" +
  182. " \"status\":1,\n" +
  183. " \"fullName\":\"应用技术研发中心/前端研发部/应用产品前端研发组\"\n" +
  184. " },\n" +
  185. " {\n" +
  186. " \"id\":50090217,\n" +
  187. " \"parentId\":50090194,\n" +
  188. " \"name\":\"终端安全产品前端研发组\",\n" +
  189. " \"status\":0,\n" +
  190. " \"fullName\":\"应用技术研发一中心/前端研发部/终端安全产品前端研发组\"\n" +
  191. " },\n" +
  192. " {\n" +
  193. " \"id\":50090218,\n" +
  194. " \"parentId\":50090194,\n" +
  195. " \"name\":\"安全产品前端研发组\",\n" +
  196. " \"status\":1,\n" +
  197. " \"fullName\":\"应用技术研发中心/前端研发部/安全产品前端研发组\"\n" +
  198. " },\n" +
  199. " {\n" +
  200. " \"id\":50090219,\n" +
  201. " \"parentId\":50090194,\n" +
  202. " \"name\":\"数据安全前端研发组\",\n" +
  203. " \"status\":0,\n" +
  204. " \"fullName\":\"应用技术研发一中心/前端研发部/数据安全前端研发组\"\n" +
  205. " },\n" +
  206. " {\n" +
  207. " \"id\":50090220,\n" +
  208. " \"parentId\":50090194,\n" +
  209. " \"name\":\"运维前端研发组\",\n" +
  210. " \"status\":1,\n" +
  211. " \"fullName\":\"应用技术研发中心/前端研发部/运维前端研发组\"\n" +
  212. " },\n" +
  213. " {\n" +
  214. " \"id\":50090221,\n" +
  215. " \"parentId\":50090194,\n" +
  216. " \"name\":\"华南基地前端研发组\",\n" +
  217. " \"status\":1,\n" +
  218. " \"fullName\":\"应用技术研发中心/前端研发部/华南基地前端研发组\"\n" +
  219. " },\n" +
  220. " {\n" +
  221. " \"id\":50090222,\n" +
  222. " \"parentId\":50090194,\n" +
  223. " \"name\":\"补天产品前端研发部\",\n" +
  224. " \"status\":1,\n" +
  225. " \"fullName\":\"应用技术研发中心/前端研发部/补天产品前端研发部\"\n" +
  226. " },\n" +
  227. " {\n" +
  228. " \"id\":50090789,\n" +
  229. " \"parentId\":50090194,\n" +
  230. " \"name\":\"前端一部\",\n" +
  231. " \"status\":0,\n" +
  232. " \"fullName\":\"应用技术研发一中心/前端研发部/前端一部\"\n" +
  233. " },\n" +
  234. " {\n" +
  235. " \"id\":50090790,\n" +
  236. " \"parentId\":50090789,\n" +
  237. " \"name\":\"前端一组\",\n" +
  238. " \"status\":0,\n" +
  239. " \"fullName\":\"应用技术研发一中心/前端研发部/前端一部/前端一组\"\n" +
  240. " },\n" +
  241. " {\n" +
  242. " \"id\":50090795,\n" +
  243. " \"parentId\":50090789,\n" +
  244. " \"name\":\"前端三组\",\n" +
  245. " \"status\":0,\n" +
  246. " \"fullName\":\"应用技术研发一中心/前端研发部/前端一部/前端三组\"\n" +
  247. " },\n" +
  248. " {\n" +
  249. " \"id\":50090797,\n" +
  250. " \"parentId\":50090789,\n" +
  251. " \"name\":\"珠海组\",\n" +
  252. " \"status\":0,\n" +
  253. " \"fullName\":\"应用技术研发一中心/前端研发部/前端一部/珠海组\"\n" +
  254. " },\n" +
  255. " {\n" +
  256. " \"id\":50091815,\n" +
  257. " \"parentId\":50090789,\n" +
  258. " \"name\":\"西安组\",\n" +
  259. " \"status\":0,\n" +
  260. " \"fullName\":\"应用技术研发一中心/前端研发部/前端一部/西安组\"\n" +
  261. " },\n" +
  262. " {\n" +
  263. " \"id\":50090793,\n" +
  264. " \"parentId\":50090194,\n" +
  265. " \"name\":\"前端二部\",\n" +
  266. " \"status\":0,\n" +
  267. " \"fullName\":\"应用技术研发一中心/前端研发部/前端二部\"\n" +
  268. " },\n" +
  269. " {\n" +
  270. " \"id\":50090791,\n" +
  271. " \"parentId\":50090793,\n" +
  272. " \"name\":\"前端四组\",\n" +
  273. " \"status\":0,\n" +
  274. " \"fullName\":\"应用技术研发一中心/前端研发部/前端二部/前端四组\"\n" +
  275. " },\n" +
  276. " {\n" +
  277. " \"id\":50090794,\n" +
  278. " \"parentId\":50090793,\n" +
  279. " \"name\":\"前端二组\",\n" +
  280. " \"status\":0,\n" +
  281. "\n" +
  282. " \"fullName\":\"应用技术研发一中心/前端研发部/前端二部/前端二组\"\n" +
  283. " },\n" +
  284. " {\n" +
  285. " \"id\":50091816,\n" +
  286. " \"parentId\":50090793,\n" +
  287. " \"name\":\"上海组\",\n" +
  288. " \"status\":0,\n" +
  289. " \"fullName\":\"应用技术研发一中心/前端研发部/前端二部/上海组\"\n" +
  290. " },\n" +
  291. " {\n" +
  292. " \"id\":50090798,\n" +
  293. " \"parentId\":50090194,\n" +
  294. " \"name\":\"共性技术组\",\n" +
  295. " \"status\":0,\n" +
  296. " \"fullName\":\"应用技术研发一中心/前端研发部/共性技术组\"\n" +
  297. " },\n" +
  298. " {\n" +
  299. " \"id\":50091814,\n" +
  300. " \"parentId\":50090194,\n" +
  301. " \"name\":\"前端三部\",\n" +
  302. " \"status\":0,\n" +
  303. " \"fullName\":\"应用技术研发一中心/前端研发部/前端三部\"\n" +
  304. " },\n" +
  305. " {\n" +
  306. " \"id\":50090792,\n" +
  307. " \"parentId\":50091814,\n" +
  308. " \"name\":\"前端六组\",\n" +
  309. " \"status\":0,\n" +
  310. " \"fullName\":\"应用技术研发一中心/前端研发部/前端三部/前端六组\"\n" +
  311. " },\n" +
  312. " {\n" +
  313. " \"id\":50090796,\n" +
  314. " \"parentId\":50091814,\n" +
  315. " \"name\":\"前端七组\",\n" +
  316. " \"status\":0,\n" +
  317. " \"fullName\":\"应用技术研发一中心/前端研发部/前端三部/前端七组\"\n" +
  318. " },\n" +
  319. " {\n" +
  320. " \"id\":50091817,\n" +
  321. " \"parentId\":50091814,\n" +
  322. " \"name\":\"前端八组\",\n" +
  323. " \"status\":0,\n" +
  324. " \"fullName\":\"应用技术研发一中心/前端研发部/前端三部/前端八组\"\n" +
  325. " },\n" +
  326. " {\n" +
  327. " \"id\":50091818,\n" +
  328. " \"parentId\":50091814,\n" +
  329. " \"name\":\"前端九组\",\n" +
  330. " \"status\":0,\n" +
  331. " \"fullName\":\"应用技术研发一中心/前端研发部/前端三部/前端九组\"\n" +
  332. " },\n" +
  333. " {\n" +
  334. " \"id\":50090195,\n" +
  335. " \"parentId\":50090193,\n" +
  336. " \"name\":\"研发一部\",\n" +
  337. " \"status\":0,\n" +
  338. " \"fullName\":\"应用技术研发一中心/研发一部\"\n" +
  339. " },\n" +
  340. " {\n" +
  341. " \"id\":50090620,\n" +
  342. " \"parentId\":50090195,\n" +
  343. " \"name\":\"策略管理组\",\n" +
  344. " \"status\":0,\n" +
  345. " \"fullName\":\"应用技术研发一中心/研发一部/策略管理组\"\n" +
  346. " },\n" +
  347. " {\n" +
  348. " \"id\":50090621,\n" +
  349. " \"parentId\":50090195,\n" +
  350. " \"name\":\"集中管理组\",\n" +
  351. " \"status\":0,\n" +
  352. " \"fullName\":\"应用技术研发一中心/研发一部/集中管理组\"\n" +
  353. " },\n" +
  354. " {\n" +
  355. " \"id\":50090622,\n" +
  356. " \"parentId\":50090195,\n" +
  357. " \"name\":\"产品规划与设计组\",\n" +
  358. " \"status\":0,\n" +
  359. " \"fullName\":\"应用技术研发一中心/研发一部/产品规划与设计组\"\n" +
  360. " },\n" +
  361. " {\n" +
  362. " \"id\":50090632,\n" +
  363. " \"parentId\":50090195,\n" +
  364. " \"name\":\"研发管理组\",\n" +
  365. " \"status\":0,\n" +
  366. " \"fullName\":\"应用技术研发一中心/研发一部/研发管理组\"\n" +
  367. " },\n" +
  368. " {\n" +
  369. " \"id\":50091022,\n" +
  370. " \"parentId\":50090195,\n" +
  371. " \"name\":\"解决方案组\",\n" +
  372. " \"status\":0,\n" +
  373. " \"fullName\":\"应用技术研发一中心/研发一部/解决方案组\"\n" +
  374. " },\n" +
  375. " {\n" +
  376. " \"id\":50091023,\n" +
  377. " \"parentId\":50090195,\n" +
  378. " \"name\":\"公共服务组\",\n" +
  379. " \"status\":0,\n" +
  380. " \"fullName\":\"应用技术研发一中心/研发一部/公共服务组\"\n" +
  381. "\n" +
  382. " },\n" +
  383. " {\n" +
  384. " \"id\":50091024,\n" +
  385. " \"parentId\":50090195,\n" +
  386. " \"name\":\"网络拓普组\",\n" +
  387. " \"status\":0,\n" +
  388. " \"fullName\":\"应用技术研发一中心/研发一部/网络拓普组\"\n" +
  389. " },\n" +
  390. " {\n" +
  391. " \"id\":50090197,\n" +
  392. " \"parentId\":50090193,\n" +
  393. " \"name\":\"研发三部\",\n" +
  394. " \"status\":0,\n" +
  395. " \"fullName\":\"应用技术研发一中心/研发三部\"\n" +
  396. " },\n" +
  397. " {\n" +
  398. " \"id\":50090232,\n" +
  399. " \"parentId\":50090197,\n" +
  400. " \"name\":\"工业安全服务端研发组\",\n" +
  401. " \"status\":0,\n" +
  402. " \"fullName\":\"应用技术研发一中心/研发三部/工业安全服务端研发组\"\n" +
  403. " },\n" +
  404. " {\n" +
  405. " \"id\":50090631,\n" +
  406. " \"parentId\":50090193,\n" +
  407. " \"name\":\"设计与研发支撑部\",\n" +
  408. " \"status\":0,\n" +
  409. " \"fullName\":\"应用技术研发一中心/设计与研发支撑部\"\n" +
  410. " },\n" +
  411. " {\n" +
  412. " \"id\":50090633,\n" +
  413. " \"parentId\":50090193,\n" +
  414. " \"name\":\"UED\",\n" +
  415. " \"status\":0,\n" +
  416. " \"fullName\":\"应用技术研发一中心/UED\"\n" +
  417. " },\n" +
  418. " {\n" +
  419. " \"id\":50090799,\n" +
  420. " \"parentId\":50090193,\n" +
  421. " \"name\":\"武汉研发部\",\n" +
  422. " \"status\":0,\n" +
  423. " \"fullName\":\"应用技术研发一中心/武汉研发部\"\n" +
  424. " },\n" +
  425. " {\n" +
  426. " \"id\":50090800,\n" +
  427. " \"parentId\":50090799,\n" +
  428. " \"name\":\"武汉前端一组\",\n" +
  429. " \"status\":0,\n" +
  430. " \"fullName\":\"应用技术研发一中心/武汉研发部/武汉前端一组\"\n" +
  431. " },\n" +
  432. " {\n" +
  433. " \"id\":50090801,\n" +
  434. " \"parentId\":50090799,\n" +
  435. " \"name\":\"武汉前端二组\",\n" +
  436. " \"status\":0,\n" +
  437. " \"fullName\":\"应用技术研发一中心/武汉研发部/武汉前端二组\"\n" +
  438. " }]\n";
  439. //字符串转换JSON数组
  440. JSONArray jsonArray = JSONArray.parseArray(strJson);
  441. //节点列表(散列表,用于临时存储节点对象)
  442. HashMap nodeList = new HashMap();
  443. //最后结果节点列表
  444. HashMap nodeResultList = new HashMap();
  445. //根节点
  446. Node root = new Node();
  447. Node node =new Node();
  448. //设置根节点,id为0
  449. nodeResultList.put(0, node);
  450.  
  451. //根据结果集构造节点列表(存入散列表)
  452. for(int i=0;i<jsonArray.size();i++){
  453. Node node1 = JSONObject.parseObject(jsonArray.get(i).toString(),Node.class);
  454. nodeList.put(node1.id, node1);
  455. }
  456.  
  457. //构造无序的多叉树 //entrySet() 该方法返回值是这个map中各个键值对映射关系的集合
  458. Set entrySet = nodeList.entrySet();
  459. //value=entrySet.iterator().next().getValue() key=entrySet.iterator().next().getKey()
  460. for (Iterator it = entrySet.iterator(); it.hasNext();) {
  461. node = (Node) ((Map.Entry) it.next()).getValue();
  462. int i= 1;
  463. //如果parentId有对应的id,则作为孩子节点加入对应的父节点中
  464. for (Iterator it2 = entrySet.iterator(); it2.hasNext();) {
  465. Node node2 = (Node) ((Map.Entry) it2.next()).getValue();
  466. if (node.parentId == node2.id) {
  467. ((Node) nodeList.get(node.parentId)).addChild(node);
  468. System.out.println(node.parentId);
  469. i++;
  470. break;
  471. }
  472. }
  473. //若parentId都无对应的id,则为一级节点,加入根节点中
  474. if(i==1){
  475. ((Node) nodeResultList.get(0)).addChild(node);
  476. }
  477. }
  478.  
  479. root = (Node) nodeResultList.get(0);
  480. // 输出无序的树形菜单的JSON字符串
  481. System.out.println(JSON.toJSONString(root));
  482. // 对多叉树进行横向排序
  483. root.sortChildren();
  484.  
  485. // 输出有序的树形菜单的JSON字符串
  486. //重写的toString方法的结果,(可使最后结果根据自己想要展示的样子展示)
  487. System.out.println("------------------root.toString()"+root.toString());
  488. //未重写toString方法的结果
  489. System.out.println("------------------JSON.toJSONString(root)"+JSON.toJSONString(root));
  490.  
  491. }
  492. }
  1. package com.example.rabbitmq2;
  2.  
  3. import com.alibaba.fastjson.JSONObject;
  4. import lombok.Data;
  5. import lombok.Getter;
  6. import lombok.Setter;
  7.  
  8. import java.util.ArrayList;
  9. import java.util.Collections;
  10. import java.util.Iterator;
  11. import java.util.List;
  12.  
  13. @Data
  14. public class Node {
  15. /**
  16. * 节点编号
  17. */
  18. public int id;
  19. /**
  20. * 父节点编号
  21. */
  22. public int parentId;
  23. /**
  24. * 节点名称
  25. */
  26. public String name;
  27. /**
  28. * 节点状态
  29. */
  30. public int status;
  31. /**
  32. * 节点全称
  33. */
  34. public String fullName;
  35.  
  36. /**
  37. * 孩子节点列表
  38. */
  39. private List childrenList = new ArrayList();
  40.  
  41. // 先序遍历,拼接JSON字符串
  42. public String toString() {
  43. String result = "{"
  44. + "\"id\" : \"" + id + "\""
  45. + ", \"fullName\" : \"" + fullName + "\""
  46. + ", \"name\" : \"" + name + "\""
  47. + ", \"status\" : \"" + status + "\"";
  48.  
  49. if (childrenList != null && childrenList.size() != 0) {
  50. result += ", \"children\" : " + childrenList.toString();
  51. }
  52. return result + "}";
  53. }
  54.  
  55. // 兄弟节点横向排序
  56. public void sortChildren() {
  57. if (childrenList != null && childrenList.size() != 0) {
  58. // 对本层节点进行排序
  59. // 可根据不同的排序属性,传入不同的比较器,这里传入ID比较器
  60. Collections.sort(childrenList, new NodeIDComparator());
  61. // 对每个节点的下一层节点进行排序
  62. for (Iterator it = childrenList.iterator(); it.hasNext();) {
  63. ((Node) it.next()).sortChildren();
  64. }
  65. }
  66. }
  67. // 添加孩子节点
  68. public void addChild(Node node) {
  69. childrenList.add(node);
  70.  
  71. }
  72. }
  1. package com.example.rabbitmq2;
  2.  
  3. import java.util.Comparator;
  4.  
  5. /**
  6. * 节点比较器
  7. */
  8. class NodeIDComparator implements Comparator {
  9. // 按照节点编号比较
  10. public int compare(Object o1, Object o2) {
  11. int j1 = ((Node) o1).id;
  12. int j2 = ((Node) o2).id;
  13. return (j1 < j2 ? -1 : (j1 == j2 ? 0 : 1));
  14. }
  15. }

代码2:

实现过程:

1.将传入的json字符串转为List

2.找的所有的一级节点存入结果list中

3.使用递归,为所有的节点设置子节点

代码

  1. package com.example.rabbitmq2;
  2.  
  3. import com.alibaba.fastjson.JSON;
  4. import com.alibaba.fastjson.JSONArray;
  5. import com.alibaba.fastjson.JSONObject;
  6. import org.junit.platform.commons.util.StringUtils;
  7.  
  8. import java.util.ArrayList;
  9. import java.util.HashMap;
  10. import java.util.List;
  11. import java.util.Map;
  12.  
  13. public class MultipleTree3 {
  14. public static void main(String[] args) {
  15. // 原始的数据
  16. /**
  17. * 读取层次数据结果集列表
  18. */
  19. String strJson ="[\n" +"" +
  20. " {\n" +
  21. " \"id\":50090113,\n" +
  22. " \"parentId\":50000001,\n" +
  23. " \"name\":\"应用技术研发二中心\",\n" +
  24. " \"status\":0, \n" +
  25. " \"fullName\":\"应用技术研发二中心\"\n" +
  26. " },\n" +
  27. " {\n" +
  28. " \"id\":50090193,\n" +
  29. " \"parentId\":50000000,\n" +
  30. " \"name\":\"应用技术研发一中心\",\n" +
  31. " \"status\":0, \n" +
  32. " \"fullName\":\"应用技术研发一中心\"\n" +
  33. " },\n" +
  34. " {\n" +
  35. " \"id\":50090194,\n" +
  36. " \"parentId\":50090193,\n" +
  37. " \"name\":\"前端研发部\",\n" +
  38. " \"status\":0,\n" +
  39. " \"fullName\":\"应用技术研发一中心/前端研发部\"\n" +
  40. " },\n" +
  41. " {\n" +
  42. " \"id\":50005413,\n" +
  43. " \"parentId\":50090194,\n" +
  44. " \"name\":\"安全网关产品前端研发组\",\n" +
  45. " \"status\":1,\n" +
  46. " \"fullName\":\"应用技术研发中心/前端研发部/安全网关产品前端研发组\"\n" +
  47. " },\n" +
  48. " {\n" +
  49. " \"id\":50005415,\n" +
  50. " \"parentId\":50090194,\n" +
  51. " \"name\":\"前端研发二组\",\n" +
  52. " \"status\":1,\n" +
  53. " \"fullName\":\"应用技术研发中心/前端研发部/前端研发二组\"\n" +
  54. " },\n" +
  55. " {\n" +
  56. " \"id\":50090199,\n" +
  57. " \"parentId\":50090194,\n" +
  58. " \"name\":\"云安全前端研发组\",\n" +
  59. " \"status\":1,\n" +
  60. " \"fullName\":\"应用技术研发中心/前端研发部/云安全前端研发组\"\n" +
  61. " },\n" +
  62. " {\n" +
  63. " \"id\":50090200,\n" +
  64. " \"parentId\":50090194,\n" +
  65. " \"name\":\"威胁情报前端研发组\",\n" +
  66. " \"status\":1,\n" +
  67. " \"fullName\":\"应用技术研发中心/前端研发部/威胁情报前端研发组\"\n" +
  68. " },\n" +
  69. " {\n" +
  70. " \"id\":50090201,\n" +
  71. " \"parentId\":50090194,\n" +
  72. " \"name\":\"大数据与安全运营前端产品组\",\n" +
  73. " \"status\":1,\n" +
  74. " \"fullName\":\"应用技术研发中心/前端研发部/大数据与安全运营前端产品组\"\n" +
  75. " \n" +
  76. " },\n" +
  77. " {\n" +
  78. " \"id\":50090202,\n" +
  79. " \"parentId\":50090194,\n" +
  80. " \"name\":\"大数据与安全运营前端架构组\",\n" +
  81. " \"status\":1,\n" +
  82. " \"fullName\":\"应用技术研发中心/前端研发部/大数据与安全运营前端架构组\"\n" +
  83. " \n" +
  84. " },\n" +
  85. " {\n" +
  86. " \"id\":50090203,\n" +
  87. " \"parentId\":50090194,\n" +
  88. " \"name\":\"大数据与安全运营前端研发二组\",\n" +
  89. " \"status\":1,\n" +
  90. " \n" +
  91. " \"fullName\":\"应用技术研发中心/前端研发部/大数据与安全运营前端研发二组\"\n" +
  92. " },\n" +
  93. " {\n" +
  94. " \"id\":50090204,\n" +
  95. " \"parentId\":50090194,\n" +
  96. " \"name\":\"大数据与安全运营前端研发三组\",\n" +
  97. " \"status\":1,\n" +
  98. " \"fullName\":\"应用技术研发中心/前端研发部/大数据与安全运营前端研发三组\"\n" +
  99. "\n" +
  100. " },\n" +
  101. " {\n" +
  102. " \"id\":50090205,\n" +
  103. " \"parentId\":50090194,\n" +
  104. " \"name\":\"大数据与安全运营前端研发四组\",\n" +
  105. " \"status\":1,\n" +
  106. " \n" +
  107. " \"fullName\":\"应用技术研发中心/前端研发部/大数据与安全运营前端研发四组\"\n" +
  108. "\n" +
  109. " },\n" +
  110. " {\n" +
  111. " \"id\":50090206,\n" +
  112. " \"parentId\":50090194,\n" +
  113. " \"name\":\"大数据与安全运营前端研发运营商部\",\n" +
  114. " \"status\":1,\n" +
  115. " \n" +
  116. " \"fullName\":\"应用技术研发中心/前端研发部/大数据与安全运营前端研发运营商部\"\n" +
  117. "\n" +
  118. " },\n" +
  119. " {\n" +
  120. " \"id\":50090207,\n" +
  121. " \"parentId\":50090194,\n" +
  122. " \"name\":\"大数据与安全运营前端研发政企部\",\n" +
  123. " \"status\":1, \n" +
  124. " \"fullName\":\"应用技术研发中心/前端研发部/大数据与安全运营前端研发政企部\"\n" +
  125. " },\n" +
  126. " {\n" +
  127. " \"id\":50090208,\n" +
  128. " \"parentId\":50090194,\n" +
  129. " \"name\":\"态势感知前端研发组\",\n" +
  130. " \"status\":1,\n" +
  131. " \"fullName\":\"应用技术研发中心/前端研发部/态势感知前端研发组\"\n" +
  132. " },\n" +
  133. " {\n" +
  134. " \"id\":50090209,\n" +
  135. " \"parentId\":50090194,\n" +
  136. " \"name\":\"大数据应用前端研发组\",\n" +
  137. " \"status\":1,\n" +
  138. " \"fullName\":\"应用技术研发中心/前端研发部/大数据应用前端研发组\"\n" +
  139. " },\n" +
  140. " {\n" +
  141. " \"id\":50090210,\n" +
  142. " \"parentId\":50090194,\n" +
  143. " \"name\":\"大数据与威胁分析前端研发一组\",\n" +
  144. " \"status\":1,\n" +
  145. " \"fullName\":\"应用技术研发中心/前端研发部/大数据与威胁分析前端研发一组\"\n" +
  146. " },\n" +
  147. " {\n" +
  148. " \"id\":50090211,\n" +
  149. " \"parentId\":50090194,\n" +
  150. " \"name\":\"大数据与威胁公司前端研发二组\",\n" +
  151. " \"status\":1,\n" +
  152. " \"fullName\":\"应用技术研发中心/前端研发部/大数据与威胁公司前端研发二组\"\n" +
  153. " },\n" +
  154. " {\n" +
  155. " \"id\":50090212,\n" +
  156. " \"parentId\":50090194,\n" +
  157. " \"name\":\"大数据与威胁分析前端研发三组\",\n" +
  158. " \"status\":1,\n" +
  159. " \"fullName\":\"应用技术研发中心/前端研发部/大数据与威胁分析前端研发三组\"\n" +
  160. " },\n" +
  161. " {\n" +
  162. " \"id\":50090213,\n" +
  163. " \"parentId\":50090194,\n" +
  164. " \"name\":\"工业安全前端研发组\",\n" +
  165. " \"status\":1,\n" +
  166. " \"fullName\":\"应用技术研发中心/前端研发部/工业安全前端研发组\"\n" +
  167. " },\n" +
  168. " {\n" +
  169. " \"id\":50090214,\n" +
  170. " \"parentId\":50090194,\n" +
  171. " \"name\":\"行为安全前端研发组\",\n" +
  172. " \"status\":1,\n" +
  173. " \"fullName\":\"应用技术研发中心/前端研发部/行为安全前端研发组\"\n" +
  174. " },\n" +
  175. " {\n" +
  176. " \"id\":50090215,\n" +
  177. " \"parentId\":50090194,\n" +
  178. " \"name\":\"基础大数据前端研发组\",\n" +
  179. " \"status\":1,\n" +
  180. " \"fullName\":\"应用技术研发中心/前端研发部/基础大数据前端研发组\"\n" +
  181. " },\n" +
  182. " {\n" +
  183. " \"id\":50090216,\n" +
  184. " \"parentId\":50090194,\n" +
  185. " \"name\":\"应用产品前端研发组\",\n" +
  186. " \"status\":1,\n" +
  187. " \"fullName\":\"应用技术研发中心/前端研发部/应用产品前端研发组\"\n" +
  188. " },\n" +
  189. " {\n" +
  190. " \"id\":50090217,\n" +
  191. " \"parentId\":50090194,\n" +
  192. " \"name\":\"终端安全产品前端研发组\",\n" +
  193. " \"status\":0,\n" +
  194. " \"fullName\":\"应用技术研发一中心/前端研发部/终端安全产品前端研发组\"\n" +
  195. " },\n" +
  196. " {\n" +
  197. " \"id\":50090218,\n" +
  198. " \"parentId\":50090194,\n" +
  199. " \"name\":\"安全产品前端研发组\",\n" +
  200. " \"status\":1,\n" +
  201. " \"fullName\":\"应用技术研发中心/前端研发部/安全产品前端研发组\"\n" +
  202. " },\n" +
  203. " {\n" +
  204. " \"id\":50090219,\n" +
  205. " \"parentId\":50090194,\n" +
  206. " \"name\":\"数据安全前端研发组\",\n" +
  207. " \"status\":0,\n" +
  208. " \"fullName\":\"应用技术研发一中心/前端研发部/数据安全前端研发组\"\n" +
  209. " },\n" +
  210. " {\n" +
  211. " \"id\":50090220,\n" +
  212. " \"parentId\":50090194,\n" +
  213. " \"name\":\"运维前端研发组\",\n" +
  214. " \"status\":1,\n" +
  215. " \"fullName\":\"应用技术研发中心/前端研发部/运维前端研发组\"\n" +
  216. " },\n" +
  217. " {\n" +
  218. " \"id\":50090221,\n" +
  219. " \"parentId\":50090194,\n" +
  220. " \"name\":\"华南基地前端研发组\",\n" +
  221. " \"status\":1,\n" +
  222. " \"fullName\":\"应用技术研发中心/前端研发部/华南基地前端研发组\"\n" +
  223. " },\n" +
  224. " {\n" +
  225. " \"id\":50090222,\n" +
  226. " \"parentId\":50090194,\n" +
  227. " \"name\":\"补天产品前端研发部\",\n" +
  228. " \"status\":1,\n" +
  229. " \"fullName\":\"应用技术研发中心/前端研发部/补天产品前端研发部\"\n" +
  230. " },\n" +
  231. " {\n" +
  232. " \"id\":50090789,\n" +
  233. " \"parentId\":50090194,\n" +
  234. " \"name\":\"前端一部\",\n" +
  235. " \"status\":0,\n" +
  236. " \"fullName\":\"应用技术研发一中心/前端研发部/前端一部\"\n" +
  237. " },\n" +
  238. " {\n" +
  239. " \"id\":50090790,\n" +
  240. " \"parentId\":50090789,\n" +
  241. " \"name\":\"前端一组\",\n" +
  242. " \"status\":0,\n" +
  243. " \"fullName\":\"应用技术研发一中心/前端研发部/前端一部/前端一组\"\n" +
  244. " },\n" +
  245. " {\n" +
  246. " \"id\":50090795,\n" +
  247. " \"parentId\":50090789,\n" +
  248. " \"name\":\"前端三组\",\n" +
  249. " \"status\":0,\n" +
  250. " \"fullName\":\"应用技术研发一中心/前端研发部/前端一部/前端三组\"\n" +
  251. " },\n" +
  252. " {\n" +
  253. " \"id\":50090797,\n" +
  254. " \"parentId\":50090789,\n" +
  255. " \"name\":\"珠海组\",\n" +
  256. " \"status\":0,\n" +
  257. " \"fullName\":\"应用技术研发一中心/前端研发部/前端一部/珠海组\"\n" +
  258. " },\n" +
  259. " {\n" +
  260. " \"id\":50091815,\n" +
  261. " \"parentId\":50090789,\n" +
  262. " \"name\":\"西安组\",\n" +
  263. " \"status\":0,\n" +
  264. " \"fullName\":\"应用技术研发一中心/前端研发部/前端一部/西安组\"\n" +
  265. " },\n" +
  266. " {\n" +
  267. " \"id\":50090793,\n" +
  268. " \"parentId\":50090194,\n" +
  269. " \"name\":\"前端二部\",\n" +
  270. " \"status\":0,\n" +
  271. " \"fullName\":\"应用技术研发一中心/前端研发部/前端二部\"\n" +
  272. " },\n" +
  273. " {\n" +
  274. " \"id\":50090791,\n" +
  275. " \"parentId\":50090793,\n" +
  276. " \"name\":\"前端四组\",\n" +
  277. " \"status\":0,\n" +
  278. " \"fullName\":\"应用技术研发一中心/前端研发部/前端二部/前端四组\"\n" +
  279. " },\n" +
  280. " {\n" +
  281. " \"id\":50090794,\n" +
  282. " \"parentId\":50090793,\n" +
  283. " \"name\":\"前端二组\",\n" +
  284. " \"status\":0,\n" +
  285. "\n" +
  286. " \"fullName\":\"应用技术研发一中心/前端研发部/前端二部/前端二组\"\n" +
  287. " },\n" +
  288. " {\n" +
  289. " \"id\":50091816,\n" +
  290. " \"parentId\":50090793,\n" +
  291. " \"name\":\"上海组\",\n" +
  292. " \"status\":0,\n" +
  293. " \"fullName\":\"应用技术研发一中心/前端研发部/前端二部/上海组\"\n" +
  294. " },\n" +
  295. " {\n" +
  296. " \"id\":50090798,\n" +
  297. " \"parentId\":50090194,\n" +
  298. " \"name\":\"共性技术组\",\n" +
  299. " \"status\":0,\n" +
  300. " \"fullName\":\"应用技术研发一中心/前端研发部/共性技术组\"\n" +
  301. " },\n" +
  302. " {\n" +
  303. " \"id\":50091814,\n" +
  304. " \"parentId\":50090194,\n" +
  305. " \"name\":\"前端三部\",\n" +
  306. " \"status\":0,\n" +
  307. " \"fullName\":\"应用技术研发一中心/前端研发部/前端三部\"\n" +
  308. " },\n" +
  309. " {\n" +
  310. " \"id\":50090792,\n" +
  311. " \"parentId\":50091814,\n" +
  312. " \"name\":\"前端六组\",\n" +
  313. " \"status\":0,\n" +
  314. " \"fullName\":\"应用技术研发一中心/前端研发部/前端三部/前端六组\"\n" +
  315. " },\n" +
  316. " {\n" +
  317. " \"id\":50090796,\n" +
  318. " \"parentId\":50091814,\n" +
  319. " \"name\":\"前端七组\",\n" +
  320. " \"status\":0,\n" +
  321. " \"fullName\":\"应用技术研发一中心/前端研发部/前端三部/前端七组\"\n" +
  322. " },\n" +
  323. " {\n" +
  324. " \"id\":50091817,\n" +
  325. " \"parentId\":50091814,\n" +
  326. " \"name\":\"前端八组\",\n" +
  327. " \"status\":0,\n" +
  328. " \"fullName\":\"应用技术研发一中心/前端研发部/前端三部/前端八组\"\n" +
  329. " },\n" +
  330. " {\n" +
  331. " \"id\":50091818,\n" +
  332. " \"parentId\":50091814,\n" +
  333. " \"name\":\"前端九组\",\n" +
  334. " \"status\":0,\n" +
  335. " \"fullName\":\"应用技术研发一中心/前端研发部/前端三部/前端九组\"\n" +
  336. " },\n" +
  337. " {\n" +
  338. " \"id\":50090195,\n" +
  339. " \"parentId\":50090193,\n" +
  340. " \"name\":\"研发一部\",\n" +
  341. " \"status\":0,\n" +
  342. " \"fullName\":\"应用技术研发一中心/研发一部\"\n" +
  343. " },\n" +
  344. " {\n" +
  345. " \"id\":50090620,\n" +
  346. " \"parentId\":50090195,\n" +
  347. " \"name\":\"策略管理组\",\n" +
  348. " \"status\":0,\n" +
  349. " \"fullName\":\"应用技术研发一中心/研发一部/策略管理组\"\n" +
  350. " },\n" +
  351. " {\n" +
  352. " \"id\":50090621,\n" +
  353. " \"parentId\":50090195,\n" +
  354. " \"name\":\"集中管理组\",\n" +
  355. " \"status\":0,\n" +
  356. " \"fullName\":\"应用技术研发一中心/研发一部/集中管理组\"\n" +
  357. " },\n" +
  358. " {\n" +
  359. " \"id\":50090622,\n" +
  360. " \"parentId\":50090195,\n" +
  361. " \"name\":\"产品规划与设计组\",\n" +
  362. " \"status\":0,\n" +
  363. " \"fullName\":\"应用技术研发一中心/研发一部/产品规划与设计组\"\n" +
  364. " },\n" +
  365. " {\n" +
  366. " \"id\":50090632,\n" +
  367. " \"parentId\":50090195,\n" +
  368. " \"name\":\"研发管理组\",\n" +
  369. " \"status\":0,\n" +
  370. " \"fullName\":\"应用技术研发一中心/研发一部/研发管理组\"\n" +
  371. " },\n" +
  372. " {\n" +
  373. " \"id\":50091022,\n" +
  374. " \"parentId\":50090195,\n" +
  375. " \"name\":\"解决方案组\",\n" +
  376. " \"status\":0,\n" +
  377. " \"fullName\":\"应用技术研发一中心/研发一部/解决方案组\"\n" +
  378. " },\n" +
  379. " {\n" +
  380. " \"id\":50091023,\n" +
  381. " \"parentId\":50090195,\n" +
  382. " \"name\":\"公共服务组\",\n" +
  383. " \"status\":0,\n" +
  384. " \"fullName\":\"应用技术研发一中心/研发一部/公共服务组\"\n" +
  385. "\n" +
  386. " },\n" +
  387. " {\n" +
  388. " \"id\":50091024,\n" +
  389. " \"parentId\":50090195,\n" +
  390. " \"name\":\"网络拓普组\",\n" +
  391. " \"status\":0,\n" +
  392. " \"fullName\":\"应用技术研发一中心/研发一部/网络拓普组\"\n" +
  393. " },\n" +
  394. " {\n" +
  395. " \"id\":50090197,\n" +
  396. " \"parentId\":50090193,\n" +
  397. " \"name\":\"研发三部\",\n" +
  398. " \"status\":0,\n" +
  399. " \"fullName\":\"应用技术研发一中心/研发三部\"\n" +
  400. " },\n" +
  401. " {\n" +
  402. " \"id\":50090232,\n" +
  403. " \"parentId\":50090197,\n" +
  404. " \"name\":\"工业安全服务端研发组\",\n" +
  405. " \"status\":0,\n" +
  406. " \"fullName\":\"应用技术研发一中心/研发三部/工业安全服务端研发组\"\n" +
  407. " },\n" +
  408. " {\n" +
  409. " \"id\":50090631,\n" +
  410. " \"parentId\":50090193,\n" +
  411. " \"name\":\"设计与研发支撑部\",\n" +
  412. " \"status\":0,\n" +
  413. " \"fullName\":\"应用技术研发一中心/设计与研发支撑部\"\n" +
  414. " },\n" +
  415. " {\n" +
  416. " \"id\":50090633,\n" +
  417. " \"parentId\":50090193,\n" +
  418. " \"name\":\"UED\",\n" +
  419. " \"status\":0,\n" +
  420. " \"fullName\":\"应用技术研发一中心/UED\"\n" +
  421. " },\n" +
  422. " {\n" +
  423. " \"id\":50090799,\n" +
  424. " \"parentId\":50090193,\n" +
  425. " \"name\":\"武汉研发部\",\n" +
  426. " \"status\":0,\n" +
  427. " \"fullName\":\"应用技术研发一中心/武汉研发部\"\n" +
  428. " },\n" +
  429. " {\n" +
  430. " \"id\":50090800,\n" +
  431. " \"parentId\":50090799,\n" +
  432. " \"name\":\"武汉前端一组\",\n" +
  433. " \"status\":0,\n" +
  434. " \"fullName\":\"应用技术研发一中心/武汉研发部/武汉前端一组\"\n" +
  435. " },\n" +
  436. " {\n" +
  437. " \"id\":50090801,\n" +
  438. " \"parentId\":50090799,\n" +
  439. " \"name\":\"武汉前端二组\",\n" +
  440. " \"status\":0,\n" +
  441. " \"fullName\":\"应用技术研发一中心/武汉研发部/武汉前端二组\"\n" +
  442. " }]\n";
  443. //字符串转换为List
  444. JSONArray jsonArray = JSONArray.parseArray(strJson);
  445. List<Node> rootNode = (List<Node>)JSONArray.parseArray(strJson,Node.class);
  446. // 查看结果
  447. // for (Node node : rootNode) {
  448. // System.out.println(node);
  449. // }
  450. // 最后的结果
  451. List<Node> nodeList = new ArrayList<>();
  452. // 先找到所有的一级节点
  453. for (int i = 0; i < rootNode.size(); i++) {
  454. int index = 1;
  455. for (int j = 0; j < rootNode.size();j++) {
  456. if(rootNode.get(i).getParentId()==rootNode.get(j).getId()){
  457. index++;
  458. }
  459. }
  460. //如果该ParentId无相等的id,则index仍然为1。将一级节点加入最后结果List中
  461. if(index==1){
  462. nodeList.add(rootNode.get(i));
  463. }
  464. }
  465. // 为一级节点设置子节点,getChild是递归调用的
  466. for (Node node : nodeList) {
  467. node.setChildrenList(getChild(node.getId(), rootNode));
  468. }
  469. Map<String,Object> jsonMap = new HashMap<>();
  470. jsonMap.put("node", nodeList);
  471. System.out.println(JSONObject.toJSONString(jsonMap));
  472. }
  473.  
  474. private static List getChild(int id, List<Node> rootNode) {
  475. // 子节点
  476. List<Node> childList = new ArrayList<>();
  477. for (Node node : rootNode) {
  478. // 遍历所有节点,如果该节点的父类id等于参数id,则作为孩子节点加入该节点中
  479. if (node.getParentId()==id) {
  480. childList.add(node);
  481. }
  482.  
  483. }
  484. // 把孩子节点的孩子节点循环一遍
  485. for (Node node : childList) {
  486. // 递归
  487. node.setChildrenList(getChild(node.getId(), rootNode));
  488. } // 递归退出条件
  489. if (childList.size() == 0) {
  490. return null;
  491. }
  492. return childList;
  493. }
  494.  
  495. }
  1. package com.example.rabbitmq2;
  2.  
  3. import com.alibaba.fastjson.JSONObject;
  4. import lombok.Data;
  5. import lombok.Getter;
  6. import lombok.Setter;
  7.  
  8. import java.util.ArrayList;
  9. import java.util.Collections;
  10. import java.util.Iterator;
  11. import java.util.List;
  12.  
  13. @Data
  14. public class Node {
  15. /**
  16. * 节点编号
  17. */
  18. public int id;
  19. /**
  20. * 父节点编号
  21. */
  22. public int parentId;
  23. /**
  24. * 节点名称
  25. */
  26. public String name;
  27. /**
  28. * 节点状态
  29. */
  30. public int status;
  31. /**
  32. * 节点全称
  33. */
  34. public String fullName;
  35.  
  36. /**
  37. * 孩子节点列表
  38. */
  39. private List childrenList = new ArrayList();
  40. }

相关的博客:

1.java、js中实现无限层级的树形结构(类似递归)

2.多级菜单递归遍历成树

java中实现无限层级的树形结构的更多相关文章

  1. java、js中实现无限层级的树形结构(类似递归)

    js中: var zNodes=[ {id:0,pId:-1,name:"Aaaa"}, {id:1,pId:0,name:"A"}, {id:11,pId:1 ...

  2. Delphi中根据分类数据生成树形结构的最优方法

    一. 引言:    TreeView控件适合于表示具有多层次关系的数据.它以简洁的界面,表现形式清晰.形象,操作简单而深受用户喜爱.而且用它可以实现ListView.ListBox所无法实现的很多功能 ...

  3. java不需要递归列表转树形结构

    有时候我们需要将列表结构的数据转成树形结构的数据 废话不多说直接上代码 基础类 `@Data public class TreeNode { private Long id; private Long ...

  4. Java中获取类的运行时结构

    获取运行时类的完整结构 通过反射获取运行时类的完整结构 Field(属性).Method(方法).Constructor(构造器).Superclass(父类).Interface(接口).Annot ...

  5. php无限分类 构建树形结构

    <?php class Classification { const PARENT_ID = 'parentid'; const ID = 'id'; const CHILDREN = 'chi ...

  6. Java实现树形结构的数据转Json格式

    在项目中难免会用到树形结构,毕竟这是一种常用的组织架构.楼主这里整理了两个实现的版本,可以直接拿来使用,非常方便. 楼主没有单独建项目,直接在以前的一个Demo上实现的.第一种,看下面代码: pack ...

  7. 大话Java中的哈希(hash)结构(一)

    o( ̄▽ ̄)d 小伙伴们在上网或者搞程序设计的时候,总是会听到关于“哈希(hash)”的一些东西.比如哈希算法.哈希表等等的名词,那么什么是hash呢? 一.相关概念 1.hash算法:一类特殊的算法 ...

  8. 树形结构的数据库表Schema设计-基于左右值编码

    树形结构的数据库表Schema设计 程序设计过程中,我们常常用树形结构来表征某些数据的关联关系,如企业上下级部门.栏目结构.商品分类等等,通常而言,这些树状结构需要借助于数据库完 成持久化.然而目前的 ...

  9. 散列表和JAVA中的hash

    引文 hello,今天写的数据结构是散列表(hash表),也算是一种基础数据结构了吧.学过计算机的人大概都能说出来这是个以空间换时间的东西,那么具体怎么实现的是今天要讨论的问题. 为什么需要它?主要还 ...

随机推荐

  1. 谈谈 Promise 以及实现 Fetch 的思路

    Promise 是异步编程的一种解决方案. Promise /** * 属性 */ Promise.length Promise.prototype /** * 方法 */ Promise.all(i ...

  2. 手摸手带你理解Vue的Computed原理

    前言 computed 在 Vue 中是很常用的属性配置,它能够随着依赖属性的变化而变化,为我们带来很大便利.那么本文就来带大家全面理解 computed 的内部原理以及工作流程. 在这之前,希望你能 ...

  3. 【部分】ASP.NET MVC5 - 地址栏传参两种方法

    地址栏传参两种方法 1-  Home/Index/88       (后台控制器读取需要一样的参数名称) 2-  Home/Index?id1=88?id2=99    (Request三种接受方法) ...

  4. Docker(六)容器数据卷

    容器数据卷 docker的理念回顾 将应用和环境打包成一个镜像 需求:数据可以持久化和同步 使用数据卷 指定路径挂载 docker run -it -v 主机目录:容器内目录 # 测试 [root@h ...

  5. PHP用PHPExcel导出有多个工作表的Excel表格(thinkPHP3.2.3)

    直接上代码: //导出excel public function excel() { //引入相关文件 import("Org.Util.PHPExcel"); import(&q ...

  6. sendRedirect()和forward()方法的区别

    sendRedirect()和forward()方法的区别 之前好像曾经整理过,但忘了放在哪里了,好像压根就没整理过,博客里也没有,故今天重新整理一下. 我们知道页面之间的跳转有两种方式:重定向与转发 ...

  7. C语言学习笔记——特别篇(VScode安装使用)

    B站有同步教学视频 参考博文: https://www.cnblogs.com/czlhxm/p/11794743.html 注意事项: 请在英文目录下运行!!! VScode下载链接: https: ...

  8. 转载之html特殊字符的html,js,css写法汇总

    箭头类 符号 UNICODE 符号 UNICODE HTML JS CSS HTML JS CSS ⇠ &#8672 \u21E0 \21E0 ⇢ &#8674 \u21E2 \21E ...

  9. Codeforces 1292C Xenon's Attack on the Gangs 题解

    题目 On another floor of the A.R.C. Markland-N, the young man Simon "Xenon" Jackson, takes a ...

  10. 从此不怕Synchronized锁

    Synchronized的使用 ​ Synchronized是通过监视器保证线程同步从而保证线程安全.但是Synchronized锁可以锁对象和锁类,并会产生不同的效果,通过下面的案例彻底理解Sync ...