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

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

最后结果-json

代码1:

实现过程:

1.传入一段json字符串

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

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

4.排序

代码:

 package com.example.rabbitmq2;

 import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject; import java.util.*; public class MultipleTree {
public static void main(String[] args) { /**
* 读取层次数据结果集列表
*/
String strJson ="[\n" +"" +
" {\n" +
" \"id\":50090113,\n" +
" \"parentId\":50000001,\n" +
" \"name\":\"应用技术研发二中心\",\n" +
" \"status\":0, \n" +
" \"fullName\":\"应用技术研发二中心\"\n" +
" },\n" +
" {\n" +
" \"id\":50090193,\n" +
" \"parentId\":50000000,\n" +
" \"name\":\"应用技术研发一中心\",\n" +
" \"status\":0, \n" +
" \"fullName\":\"应用技术研发一中心\"\n" +
" },\n" +
" {\n" +
" \"id\":50090194,\n" +
" \"parentId\":50090193,\n" +
" \"name\":\"前端研发部\",\n" +
" \"status\":0,\n" +
" \"fullName\":\"应用技术研发一中心/前端研发部\"\n" +
" },\n" +
" {\n" +
" \"id\":50005413,\n" +
" \"parentId\":50090194,\n" +
" \"name\":\"安全网关产品前端研发组\",\n" +
" \"status\":1,\n" +
" \"fullName\":\"应用技术研发中心/前端研发部/安全网关产品前端研发组\"\n" +
" },\n" +
" {\n" +
" \"id\":50005415,\n" +
" \"parentId\":50090194,\n" +
" \"name\":\"前端研发二组\",\n" +
" \"status\":1,\n" +
" \"fullName\":\"应用技术研发中心/前端研发部/前端研发二组\"\n" +
" },\n" +
" {\n" +
" \"id\":50090199,\n" +
" \"parentId\":50090194,\n" +
" \"name\":\"云安全前端研发组\",\n" +
" \"status\":1,\n" +
" \"fullName\":\"应用技术研发中心/前端研发部/云安全前端研发组\"\n" +
" },\n" +
" {\n" +
" \"id\":50090200,\n" +
" \"parentId\":50090194,\n" +
" \"name\":\"威胁情报前端研发组\",\n" +
" \"status\":1,\n" +
" \"fullName\":\"应用技术研发中心/前端研发部/威胁情报前端研发组\"\n" +
" },\n" +
" {\n" +
" \"id\":50090201,\n" +
" \"parentId\":50090194,\n" +
" \"name\":\"大数据与安全运营前端产品组\",\n" +
" \"status\":1,\n" +
" \"fullName\":\"应用技术研发中心/前端研发部/大数据与安全运营前端产品组\"\n" +
" \n" +
" },\n" +
" {\n" +
" \"id\":50090202,\n" +
" \"parentId\":50090194,\n" +
" \"name\":\"大数据与安全运营前端架构组\",\n" +
" \"status\":1,\n" +
" \"fullName\":\"应用技术研发中心/前端研发部/大数据与安全运营前端架构组\"\n" +
" \n" +
" },\n" +
" {\n" +
" \"id\":50090203,\n" +
" \"parentId\":50090194,\n" +
" \"name\":\"大数据与安全运营前端研发二组\",\n" +
" \"status\":1,\n" +
" \n" +
" \"fullName\":\"应用技术研发中心/前端研发部/大数据与安全运营前端研发二组\"\n" +
" },\n" +
" {\n" +
" \"id\":50090204,\n" +
" \"parentId\":50090194,\n" +
" \"name\":\"大数据与安全运营前端研发三组\",\n" +
" \"status\":1,\n" +
" \"fullName\":\"应用技术研发中心/前端研发部/大数据与安全运营前端研发三组\"\n" +
"\n" +
" },\n" +
" {\n" +
" \"id\":50090205,\n" +
" \"parentId\":50090194,\n" +
" \"name\":\"大数据与安全运营前端研发四组\",\n" +
" \"status\":1,\n" +
" \n" +
" \"fullName\":\"应用技术研发中心/前端研发部/大数据与安全运营前端研发四组\"\n" +
"\n" +
" },\n" +
" {\n" +
" \"id\":50090206,\n" +
" \"parentId\":50090194,\n" +
" \"name\":\"大数据与安全运营前端研发运营商部\",\n" +
" \"status\":1,\n" +
" \n" +
" \"fullName\":\"应用技术研发中心/前端研发部/大数据与安全运营前端研发运营商部\"\n" +
"\n" +
" },\n" +
" {\n" +
" \"id\":50090207,\n" +
" \"parentId\":50090194,\n" +
" \"name\":\"大数据与安全运营前端研发政企部\",\n" +
" \"status\":1, \n" +
" \"fullName\":\"应用技术研发中心/前端研发部/大数据与安全运营前端研发政企部\"\n" +
" },\n" +
" {\n" +
" \"id\":50090208,\n" +
" \"parentId\":50090194,\n" +
" \"name\":\"态势感知前端研发组\",\n" +
" \"status\":1,\n" +
" \"fullName\":\"应用技术研发中心/前端研发部/态势感知前端研发组\"\n" +
" },\n" +
" {\n" +
" \"id\":50090209,\n" +
" \"parentId\":50090194,\n" +
" \"name\":\"大数据应用前端研发组\",\n" +
" \"status\":1,\n" +
" \"fullName\":\"应用技术研发中心/前端研发部/大数据应用前端研发组\"\n" +
" },\n" +
" {\n" +
" \"id\":50090210,\n" +
" \"parentId\":50090194,\n" +
" \"name\":\"大数据与威胁分析前端研发一组\",\n" +
" \"status\":1,\n" +
" \"fullName\":\"应用技术研发中心/前端研发部/大数据与威胁分析前端研发一组\"\n" +
" },\n" +
" {\n" +
" \"id\":50090211,\n" +
" \"parentId\":50090194,\n" +
" \"name\":\"大数据与威胁公司前端研发二组\",\n" +
" \"status\":1,\n" +
" \"fullName\":\"应用技术研发中心/前端研发部/大数据与威胁公司前端研发二组\"\n" +
" },\n" +
" {\n" +
" \"id\":50090212,\n" +
" \"parentId\":50090194,\n" +
" \"name\":\"大数据与威胁分析前端研发三组\",\n" +
" \"status\":1,\n" +
" \"fullName\":\"应用技术研发中心/前端研发部/大数据与威胁分析前端研发三组\"\n" +
" },\n" +
" {\n" +
" \"id\":50090213,\n" +
" \"parentId\":50090194,\n" +
" \"name\":\"工业安全前端研发组\",\n" +
" \"status\":1,\n" +
" \"fullName\":\"应用技术研发中心/前端研发部/工业安全前端研发组\"\n" +
" },\n" +
" {\n" +
" \"id\":50090214,\n" +
" \"parentId\":50090194,\n" +
" \"name\":\"行为安全前端研发组\",\n" +
" \"status\":1,\n" +
" \"fullName\":\"应用技术研发中心/前端研发部/行为安全前端研发组\"\n" +
" },\n" +
" {\n" +
" \"id\":50090215,\n" +
" \"parentId\":50090194,\n" +
" \"name\":\"基础大数据前端研发组\",\n" +
" \"status\":1,\n" +
" \"fullName\":\"应用技术研发中心/前端研发部/基础大数据前端研发组\"\n" +
" },\n" +
" {\n" +
" \"id\":50090216,\n" +
" \"parentId\":50090194,\n" +
" \"name\":\"应用产品前端研发组\",\n" +
" \"status\":1,\n" +
" \"fullName\":\"应用技术研发中心/前端研发部/应用产品前端研发组\"\n" +
" },\n" +
" {\n" +
" \"id\":50090217,\n" +
" \"parentId\":50090194,\n" +
" \"name\":\"终端安全产品前端研发组\",\n" +
" \"status\":0,\n" +
" \"fullName\":\"应用技术研发一中心/前端研发部/终端安全产品前端研发组\"\n" +
" },\n" +
" {\n" +
" \"id\":50090218,\n" +
" \"parentId\":50090194,\n" +
" \"name\":\"安全产品前端研发组\",\n" +
" \"status\":1,\n" +
" \"fullName\":\"应用技术研发中心/前端研发部/安全产品前端研发组\"\n" +
" },\n" +
" {\n" +
" \"id\":50090219,\n" +
" \"parentId\":50090194,\n" +
" \"name\":\"数据安全前端研发组\",\n" +
" \"status\":0,\n" +
" \"fullName\":\"应用技术研发一中心/前端研发部/数据安全前端研发组\"\n" +
" },\n" +
" {\n" +
" \"id\":50090220,\n" +
" \"parentId\":50090194,\n" +
" \"name\":\"运维前端研发组\",\n" +
" \"status\":1,\n" +
" \"fullName\":\"应用技术研发中心/前端研发部/运维前端研发组\"\n" +
" },\n" +
" {\n" +
" \"id\":50090221,\n" +
" \"parentId\":50090194,\n" +
" \"name\":\"华南基地前端研发组\",\n" +
" \"status\":1,\n" +
" \"fullName\":\"应用技术研发中心/前端研发部/华南基地前端研发组\"\n" +
" },\n" +
" {\n" +
" \"id\":50090222,\n" +
" \"parentId\":50090194,\n" +
" \"name\":\"补天产品前端研发部\",\n" +
" \"status\":1,\n" +
" \"fullName\":\"应用技术研发中心/前端研发部/补天产品前端研发部\"\n" +
" },\n" +
" {\n" +
" \"id\":50090789,\n" +
" \"parentId\":50090194,\n" +
" \"name\":\"前端一部\",\n" +
" \"status\":0,\n" +
" \"fullName\":\"应用技术研发一中心/前端研发部/前端一部\"\n" +
" },\n" +
" {\n" +
" \"id\":50090790,\n" +
" \"parentId\":50090789,\n" +
" \"name\":\"前端一组\",\n" +
" \"status\":0,\n" +
" \"fullName\":\"应用技术研发一中心/前端研发部/前端一部/前端一组\"\n" +
" },\n" +
" {\n" +
" \"id\":50090795,\n" +
" \"parentId\":50090789,\n" +
" \"name\":\"前端三组\",\n" +
" \"status\":0,\n" +
" \"fullName\":\"应用技术研发一中心/前端研发部/前端一部/前端三组\"\n" +
" },\n" +
" {\n" +
" \"id\":50090797,\n" +
" \"parentId\":50090789,\n" +
" \"name\":\"珠海组\",\n" +
" \"status\":0,\n" +
" \"fullName\":\"应用技术研发一中心/前端研发部/前端一部/珠海组\"\n" +
" },\n" +
" {\n" +
" \"id\":50091815,\n" +
" \"parentId\":50090789,\n" +
" \"name\":\"西安组\",\n" +
" \"status\":0,\n" +
" \"fullName\":\"应用技术研发一中心/前端研发部/前端一部/西安组\"\n" +
" },\n" +
" {\n" +
" \"id\":50090793,\n" +
" \"parentId\":50090194,\n" +
" \"name\":\"前端二部\",\n" +
" \"status\":0,\n" +
" \"fullName\":\"应用技术研发一中心/前端研发部/前端二部\"\n" +
" },\n" +
" {\n" +
" \"id\":50090791,\n" +
" \"parentId\":50090793,\n" +
" \"name\":\"前端四组\",\n" +
" \"status\":0,\n" +
" \"fullName\":\"应用技术研发一中心/前端研发部/前端二部/前端四组\"\n" +
" },\n" +
" {\n" +
" \"id\":50090794,\n" +
" \"parentId\":50090793,\n" +
" \"name\":\"前端二组\",\n" +
" \"status\":0,\n" +
"\n" +
" \"fullName\":\"应用技术研发一中心/前端研发部/前端二部/前端二组\"\n" +
" },\n" +
" {\n" +
" \"id\":50091816,\n" +
" \"parentId\":50090793,\n" +
" \"name\":\"上海组\",\n" +
" \"status\":0,\n" +
" \"fullName\":\"应用技术研发一中心/前端研发部/前端二部/上海组\"\n" +
" },\n" +
" {\n" +
" \"id\":50090798,\n" +
" \"parentId\":50090194,\n" +
" \"name\":\"共性技术组\",\n" +
" \"status\":0,\n" +
" \"fullName\":\"应用技术研发一中心/前端研发部/共性技术组\"\n" +
" },\n" +
" {\n" +
" \"id\":50091814,\n" +
" \"parentId\":50090194,\n" +
" \"name\":\"前端三部\",\n" +
" \"status\":0,\n" +
" \"fullName\":\"应用技术研发一中心/前端研发部/前端三部\"\n" +
" },\n" +
" {\n" +
" \"id\":50090792,\n" +
" \"parentId\":50091814,\n" +
" \"name\":\"前端六组\",\n" +
" \"status\":0,\n" +
" \"fullName\":\"应用技术研发一中心/前端研发部/前端三部/前端六组\"\n" +
" },\n" +
" {\n" +
" \"id\":50090796,\n" +
" \"parentId\":50091814,\n" +
" \"name\":\"前端七组\",\n" +
" \"status\":0,\n" +
" \"fullName\":\"应用技术研发一中心/前端研发部/前端三部/前端七组\"\n" +
" },\n" +
" {\n" +
" \"id\":50091817,\n" +
" \"parentId\":50091814,\n" +
" \"name\":\"前端八组\",\n" +
" \"status\":0,\n" +
" \"fullName\":\"应用技术研发一中心/前端研发部/前端三部/前端八组\"\n" +
" },\n" +
" {\n" +
" \"id\":50091818,\n" +
" \"parentId\":50091814,\n" +
" \"name\":\"前端九组\",\n" +
" \"status\":0,\n" +
" \"fullName\":\"应用技术研发一中心/前端研发部/前端三部/前端九组\"\n" +
" },\n" +
" {\n" +
" \"id\":50090195,\n" +
" \"parentId\":50090193,\n" +
" \"name\":\"研发一部\",\n" +
" \"status\":0,\n" +
" \"fullName\":\"应用技术研发一中心/研发一部\"\n" +
" },\n" +
" {\n" +
" \"id\":50090620,\n" +
" \"parentId\":50090195,\n" +
" \"name\":\"策略管理组\",\n" +
" \"status\":0,\n" +
" \"fullName\":\"应用技术研发一中心/研发一部/策略管理组\"\n" +
" },\n" +
" {\n" +
" \"id\":50090621,\n" +
" \"parentId\":50090195,\n" +
" \"name\":\"集中管理组\",\n" +
" \"status\":0,\n" +
" \"fullName\":\"应用技术研发一中心/研发一部/集中管理组\"\n" +
" },\n" +
" {\n" +
" \"id\":50090622,\n" +
" \"parentId\":50090195,\n" +
" \"name\":\"产品规划与设计组\",\n" +
" \"status\":0,\n" +
" \"fullName\":\"应用技术研发一中心/研发一部/产品规划与设计组\"\n" +
" },\n" +
" {\n" +
" \"id\":50090632,\n" +
" \"parentId\":50090195,\n" +
" \"name\":\"研发管理组\",\n" +
" \"status\":0,\n" +
" \"fullName\":\"应用技术研发一中心/研发一部/研发管理组\"\n" +
" },\n" +
" {\n" +
" \"id\":50091022,\n" +
" \"parentId\":50090195,\n" +
" \"name\":\"解决方案组\",\n" +
" \"status\":0,\n" +
" \"fullName\":\"应用技术研发一中心/研发一部/解决方案组\"\n" +
" },\n" +
" {\n" +
" \"id\":50091023,\n" +
" \"parentId\":50090195,\n" +
" \"name\":\"公共服务组\",\n" +
" \"status\":0,\n" +
" \"fullName\":\"应用技术研发一中心/研发一部/公共服务组\"\n" +
"\n" +
" },\n" +
" {\n" +
" \"id\":50091024,\n" +
" \"parentId\":50090195,\n" +
" \"name\":\"网络拓普组\",\n" +
" \"status\":0,\n" +
" \"fullName\":\"应用技术研发一中心/研发一部/网络拓普组\"\n" +
" },\n" +
" {\n" +
" \"id\":50090197,\n" +
" \"parentId\":50090193,\n" +
" \"name\":\"研发三部\",\n" +
" \"status\":0,\n" +
" \"fullName\":\"应用技术研发一中心/研发三部\"\n" +
" },\n" +
" {\n" +
" \"id\":50090232,\n" +
" \"parentId\":50090197,\n" +
" \"name\":\"工业安全服务端研发组\",\n" +
" \"status\":0,\n" +
" \"fullName\":\"应用技术研发一中心/研发三部/工业安全服务端研发组\"\n" +
" },\n" +
" {\n" +
" \"id\":50090631,\n" +
" \"parentId\":50090193,\n" +
" \"name\":\"设计与研发支撑部\",\n" +
" \"status\":0,\n" +
" \"fullName\":\"应用技术研发一中心/设计与研发支撑部\"\n" +
" },\n" +
" {\n" +
" \"id\":50090633,\n" +
" \"parentId\":50090193,\n" +
" \"name\":\"UED\",\n" +
" \"status\":0,\n" +
" \"fullName\":\"应用技术研发一中心/UED\"\n" +
" },\n" +
" {\n" +
" \"id\":50090799,\n" +
" \"parentId\":50090193,\n" +
" \"name\":\"武汉研发部\",\n" +
" \"status\":0,\n" +
" \"fullName\":\"应用技术研发一中心/武汉研发部\"\n" +
" },\n" +
" {\n" +
" \"id\":50090800,\n" +
" \"parentId\":50090799,\n" +
" \"name\":\"武汉前端一组\",\n" +
" \"status\":0,\n" +
" \"fullName\":\"应用技术研发一中心/武汉研发部/武汉前端一组\"\n" +
" },\n" +
" {\n" +
" \"id\":50090801,\n" +
" \"parentId\":50090799,\n" +
" \"name\":\"武汉前端二组\",\n" +
" \"status\":0,\n" +
" \"fullName\":\"应用技术研发一中心/武汉研发部/武汉前端二组\"\n" +
" }]\n";
//字符串转换JSON数组
JSONArray jsonArray = JSONArray.parseArray(strJson);
//节点列表(散列表,用于临时存储节点对象)
HashMap nodeList = new HashMap();
//最后结果节点列表
HashMap nodeResultList = new HashMap();
//根节点
Node root = new Node();
Node node =new Node();
//设置根节点,id为0
nodeResultList.put(0, node); //根据结果集构造节点列表(存入散列表)
for(int i=0;i<jsonArray.size();i++){
Node node1 = JSONObject.parseObject(jsonArray.get(i).toString(),Node.class);
nodeList.put(node1.id, node1);
} //构造无序的多叉树 //entrySet() 该方法返回值是这个map中各个键值对映射关系的集合
Set entrySet = nodeList.entrySet();
//value=entrySet.iterator().next().getValue() key=entrySet.iterator().next().getKey()
for (Iterator it = entrySet.iterator(); it.hasNext();) {
node = (Node) ((Map.Entry) it.next()).getValue();
int i= 1;
//如果parentId有对应的id,则作为孩子节点加入对应的父节点中
for (Iterator it2 = entrySet.iterator(); it2.hasNext();) {
Node node2 = (Node) ((Map.Entry) it2.next()).getValue();
if (node.parentId == node2.id) {
((Node) nodeList.get(node.parentId)).addChild(node);
System.out.println(node.parentId);
i++;
break;
}
}
//若parentId都无对应的id,则为一级节点,加入根节点中
if(i==1){
((Node) nodeResultList.get(0)).addChild(node);
}
} root = (Node) nodeResultList.get(0);
// 输出无序的树形菜单的JSON字符串
System.out.println(JSON.toJSONString(root));
// 对多叉树进行横向排序
root.sortChildren(); // 输出有序的树形菜单的JSON字符串
//重写的toString方法的结果,(可使最后结果根据自己想要展示的样子展示)
System.out.println("------------------root.toString()"+root.toString());
//未重写toString方法的结果
System.out.println("------------------JSON.toJSONString(root)"+JSON.toJSONString(root)); }
}
 package com.example.rabbitmq2;

 import com.alibaba.fastjson.JSONObject;
import lombok.Data;
import lombok.Getter;
import lombok.Setter; import java.util.ArrayList;
import java.util.Collections;
import java.util.Iterator;
import java.util.List; @Data
public class Node {
/**
* 节点编号
*/
public int id;
/**
* 父节点编号
*/
public int parentId;
/**
* 节点名称
*/
public String name;
/**
* 节点状态
*/
public int status;
/**
* 节点全称
*/
public String fullName; /**
* 孩子节点列表
*/
private List childrenList = new ArrayList(); // 先序遍历,拼接JSON字符串
public String toString() {
String result = "{"
+ "\"id\" : \"" + id + "\""
+ ", \"fullName\" : \"" + fullName + "\""
+ ", \"name\" : \"" + name + "\""
+ ", \"status\" : \"" + status + "\""; if (childrenList != null && childrenList.size() != 0) {
result += ", \"children\" : " + childrenList.toString();
}
return result + "}";
} // 兄弟节点横向排序
public void sortChildren() {
if (childrenList != null && childrenList.size() != 0) {
// 对本层节点进行排序
// 可根据不同的排序属性,传入不同的比较器,这里传入ID比较器
Collections.sort(childrenList, new NodeIDComparator());
// 对每个节点的下一层节点进行排序
for (Iterator it = childrenList.iterator(); it.hasNext();) {
((Node) it.next()).sortChildren();
}
}
}
// 添加孩子节点
public void addChild(Node node) {
childrenList.add(node); }
}
 package com.example.rabbitmq2;

 import java.util.Comparator;

 /**
* 节点比较器
*/
class NodeIDComparator implements Comparator {
// 按照节点编号比较
public int compare(Object o1, Object o2) {
int j1 = ((Node) o1).id;
int j2 = ((Node) o2).id;
return (j1 < j2 ? -1 : (j1 == j2 ? 0 : 1));
}
}

代码2:

实现过程:

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

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

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

代码

 package com.example.rabbitmq2;

 import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import org.junit.platform.commons.util.StringUtils; import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map; public class MultipleTree3 {
public static void main(String[] args) {
// 原始的数据
/**
* 读取层次数据结果集列表
*/
String strJson ="[\n" +"" +
" {\n" +
" \"id\":50090113,\n" +
" \"parentId\":50000001,\n" +
" \"name\":\"应用技术研发二中心\",\n" +
" \"status\":0, \n" +
" \"fullName\":\"应用技术研发二中心\"\n" +
" },\n" +
" {\n" +
" \"id\":50090193,\n" +
" \"parentId\":50000000,\n" +
" \"name\":\"应用技术研发一中心\",\n" +
" \"status\":0, \n" +
" \"fullName\":\"应用技术研发一中心\"\n" +
" },\n" +
" {\n" +
" \"id\":50090194,\n" +
" \"parentId\":50090193,\n" +
" \"name\":\"前端研发部\",\n" +
" \"status\":0,\n" +
" \"fullName\":\"应用技术研发一中心/前端研发部\"\n" +
" },\n" +
" {\n" +
" \"id\":50005413,\n" +
" \"parentId\":50090194,\n" +
" \"name\":\"安全网关产品前端研发组\",\n" +
" \"status\":1,\n" +
" \"fullName\":\"应用技术研发中心/前端研发部/安全网关产品前端研发组\"\n" +
" },\n" +
" {\n" +
" \"id\":50005415,\n" +
" \"parentId\":50090194,\n" +
" \"name\":\"前端研发二组\",\n" +
" \"status\":1,\n" +
" \"fullName\":\"应用技术研发中心/前端研发部/前端研发二组\"\n" +
" },\n" +
" {\n" +
" \"id\":50090199,\n" +
" \"parentId\":50090194,\n" +
" \"name\":\"云安全前端研发组\",\n" +
" \"status\":1,\n" +
" \"fullName\":\"应用技术研发中心/前端研发部/云安全前端研发组\"\n" +
" },\n" +
" {\n" +
" \"id\":50090200,\n" +
" \"parentId\":50090194,\n" +
" \"name\":\"威胁情报前端研发组\",\n" +
" \"status\":1,\n" +
" \"fullName\":\"应用技术研发中心/前端研发部/威胁情报前端研发组\"\n" +
" },\n" +
" {\n" +
" \"id\":50090201,\n" +
" \"parentId\":50090194,\n" +
" \"name\":\"大数据与安全运营前端产品组\",\n" +
" \"status\":1,\n" +
" \"fullName\":\"应用技术研发中心/前端研发部/大数据与安全运营前端产品组\"\n" +
" \n" +
" },\n" +
" {\n" +
" \"id\":50090202,\n" +
" \"parentId\":50090194,\n" +
" \"name\":\"大数据与安全运营前端架构组\",\n" +
" \"status\":1,\n" +
" \"fullName\":\"应用技术研发中心/前端研发部/大数据与安全运营前端架构组\"\n" +
" \n" +
" },\n" +
" {\n" +
" \"id\":50090203,\n" +
" \"parentId\":50090194,\n" +
" \"name\":\"大数据与安全运营前端研发二组\",\n" +
" \"status\":1,\n" +
" \n" +
" \"fullName\":\"应用技术研发中心/前端研发部/大数据与安全运营前端研发二组\"\n" +
" },\n" +
" {\n" +
" \"id\":50090204,\n" +
" \"parentId\":50090194,\n" +
" \"name\":\"大数据与安全运营前端研发三组\",\n" +
" \"status\":1,\n" +
" \"fullName\":\"应用技术研发中心/前端研发部/大数据与安全运营前端研发三组\"\n" +
"\n" +
" },\n" +
" {\n" +
" \"id\":50090205,\n" +
" \"parentId\":50090194,\n" +
" \"name\":\"大数据与安全运营前端研发四组\",\n" +
" \"status\":1,\n" +
" \n" +
" \"fullName\":\"应用技术研发中心/前端研发部/大数据与安全运营前端研发四组\"\n" +
"\n" +
" },\n" +
" {\n" +
" \"id\":50090206,\n" +
" \"parentId\":50090194,\n" +
" \"name\":\"大数据与安全运营前端研发运营商部\",\n" +
" \"status\":1,\n" +
" \n" +
" \"fullName\":\"应用技术研发中心/前端研发部/大数据与安全运营前端研发运营商部\"\n" +
"\n" +
" },\n" +
" {\n" +
" \"id\":50090207,\n" +
" \"parentId\":50090194,\n" +
" \"name\":\"大数据与安全运营前端研发政企部\",\n" +
" \"status\":1, \n" +
" \"fullName\":\"应用技术研发中心/前端研发部/大数据与安全运营前端研发政企部\"\n" +
" },\n" +
" {\n" +
" \"id\":50090208,\n" +
" \"parentId\":50090194,\n" +
" \"name\":\"态势感知前端研发组\",\n" +
" \"status\":1,\n" +
" \"fullName\":\"应用技术研发中心/前端研发部/态势感知前端研发组\"\n" +
" },\n" +
" {\n" +
" \"id\":50090209,\n" +
" \"parentId\":50090194,\n" +
" \"name\":\"大数据应用前端研发组\",\n" +
" \"status\":1,\n" +
" \"fullName\":\"应用技术研发中心/前端研发部/大数据应用前端研发组\"\n" +
" },\n" +
" {\n" +
" \"id\":50090210,\n" +
" \"parentId\":50090194,\n" +
" \"name\":\"大数据与威胁分析前端研发一组\",\n" +
" \"status\":1,\n" +
" \"fullName\":\"应用技术研发中心/前端研发部/大数据与威胁分析前端研发一组\"\n" +
" },\n" +
" {\n" +
" \"id\":50090211,\n" +
" \"parentId\":50090194,\n" +
" \"name\":\"大数据与威胁公司前端研发二组\",\n" +
" \"status\":1,\n" +
" \"fullName\":\"应用技术研发中心/前端研发部/大数据与威胁公司前端研发二组\"\n" +
" },\n" +
" {\n" +
" \"id\":50090212,\n" +
" \"parentId\":50090194,\n" +
" \"name\":\"大数据与威胁分析前端研发三组\",\n" +
" \"status\":1,\n" +
" \"fullName\":\"应用技术研发中心/前端研发部/大数据与威胁分析前端研发三组\"\n" +
" },\n" +
" {\n" +
" \"id\":50090213,\n" +
" \"parentId\":50090194,\n" +
" \"name\":\"工业安全前端研发组\",\n" +
" \"status\":1,\n" +
" \"fullName\":\"应用技术研发中心/前端研发部/工业安全前端研发组\"\n" +
" },\n" +
" {\n" +
" \"id\":50090214,\n" +
" \"parentId\":50090194,\n" +
" \"name\":\"行为安全前端研发组\",\n" +
" \"status\":1,\n" +
" \"fullName\":\"应用技术研发中心/前端研发部/行为安全前端研发组\"\n" +
" },\n" +
" {\n" +
" \"id\":50090215,\n" +
" \"parentId\":50090194,\n" +
" \"name\":\"基础大数据前端研发组\",\n" +
" \"status\":1,\n" +
" \"fullName\":\"应用技术研发中心/前端研发部/基础大数据前端研发组\"\n" +
" },\n" +
" {\n" +
" \"id\":50090216,\n" +
" \"parentId\":50090194,\n" +
" \"name\":\"应用产品前端研发组\",\n" +
" \"status\":1,\n" +
" \"fullName\":\"应用技术研发中心/前端研发部/应用产品前端研发组\"\n" +
" },\n" +
" {\n" +
" \"id\":50090217,\n" +
" \"parentId\":50090194,\n" +
" \"name\":\"终端安全产品前端研发组\",\n" +
" \"status\":0,\n" +
" \"fullName\":\"应用技术研发一中心/前端研发部/终端安全产品前端研发组\"\n" +
" },\n" +
" {\n" +
" \"id\":50090218,\n" +
" \"parentId\":50090194,\n" +
" \"name\":\"安全产品前端研发组\",\n" +
" \"status\":1,\n" +
" \"fullName\":\"应用技术研发中心/前端研发部/安全产品前端研发组\"\n" +
" },\n" +
" {\n" +
" \"id\":50090219,\n" +
" \"parentId\":50090194,\n" +
" \"name\":\"数据安全前端研发组\",\n" +
" \"status\":0,\n" +
" \"fullName\":\"应用技术研发一中心/前端研发部/数据安全前端研发组\"\n" +
" },\n" +
" {\n" +
" \"id\":50090220,\n" +
" \"parentId\":50090194,\n" +
" \"name\":\"运维前端研发组\",\n" +
" \"status\":1,\n" +
" \"fullName\":\"应用技术研发中心/前端研发部/运维前端研发组\"\n" +
" },\n" +
" {\n" +
" \"id\":50090221,\n" +
" \"parentId\":50090194,\n" +
" \"name\":\"华南基地前端研发组\",\n" +
" \"status\":1,\n" +
" \"fullName\":\"应用技术研发中心/前端研发部/华南基地前端研发组\"\n" +
" },\n" +
" {\n" +
" \"id\":50090222,\n" +
" \"parentId\":50090194,\n" +
" \"name\":\"补天产品前端研发部\",\n" +
" \"status\":1,\n" +
" \"fullName\":\"应用技术研发中心/前端研发部/补天产品前端研发部\"\n" +
" },\n" +
" {\n" +
" \"id\":50090789,\n" +
" \"parentId\":50090194,\n" +
" \"name\":\"前端一部\",\n" +
" \"status\":0,\n" +
" \"fullName\":\"应用技术研发一中心/前端研发部/前端一部\"\n" +
" },\n" +
" {\n" +
" \"id\":50090790,\n" +
" \"parentId\":50090789,\n" +
" \"name\":\"前端一组\",\n" +
" \"status\":0,\n" +
" \"fullName\":\"应用技术研发一中心/前端研发部/前端一部/前端一组\"\n" +
" },\n" +
" {\n" +
" \"id\":50090795,\n" +
" \"parentId\":50090789,\n" +
" \"name\":\"前端三组\",\n" +
" \"status\":0,\n" +
" \"fullName\":\"应用技术研发一中心/前端研发部/前端一部/前端三组\"\n" +
" },\n" +
" {\n" +
" \"id\":50090797,\n" +
" \"parentId\":50090789,\n" +
" \"name\":\"珠海组\",\n" +
" \"status\":0,\n" +
" \"fullName\":\"应用技术研发一中心/前端研发部/前端一部/珠海组\"\n" +
" },\n" +
" {\n" +
" \"id\":50091815,\n" +
" \"parentId\":50090789,\n" +
" \"name\":\"西安组\",\n" +
" \"status\":0,\n" +
" \"fullName\":\"应用技术研发一中心/前端研发部/前端一部/西安组\"\n" +
" },\n" +
" {\n" +
" \"id\":50090793,\n" +
" \"parentId\":50090194,\n" +
" \"name\":\"前端二部\",\n" +
" \"status\":0,\n" +
" \"fullName\":\"应用技术研发一中心/前端研发部/前端二部\"\n" +
" },\n" +
" {\n" +
" \"id\":50090791,\n" +
" \"parentId\":50090793,\n" +
" \"name\":\"前端四组\",\n" +
" \"status\":0,\n" +
" \"fullName\":\"应用技术研发一中心/前端研发部/前端二部/前端四组\"\n" +
" },\n" +
" {\n" +
" \"id\":50090794,\n" +
" \"parentId\":50090793,\n" +
" \"name\":\"前端二组\",\n" +
" \"status\":0,\n" +
"\n" +
" \"fullName\":\"应用技术研发一中心/前端研发部/前端二部/前端二组\"\n" +
" },\n" +
" {\n" +
" \"id\":50091816,\n" +
" \"parentId\":50090793,\n" +
" \"name\":\"上海组\",\n" +
" \"status\":0,\n" +
" \"fullName\":\"应用技术研发一中心/前端研发部/前端二部/上海组\"\n" +
" },\n" +
" {\n" +
" \"id\":50090798,\n" +
" \"parentId\":50090194,\n" +
" \"name\":\"共性技术组\",\n" +
" \"status\":0,\n" +
" \"fullName\":\"应用技术研发一中心/前端研发部/共性技术组\"\n" +
" },\n" +
" {\n" +
" \"id\":50091814,\n" +
" \"parentId\":50090194,\n" +
" \"name\":\"前端三部\",\n" +
" \"status\":0,\n" +
" \"fullName\":\"应用技术研发一中心/前端研发部/前端三部\"\n" +
" },\n" +
" {\n" +
" \"id\":50090792,\n" +
" \"parentId\":50091814,\n" +
" \"name\":\"前端六组\",\n" +
" \"status\":0,\n" +
" \"fullName\":\"应用技术研发一中心/前端研发部/前端三部/前端六组\"\n" +
" },\n" +
" {\n" +
" \"id\":50090796,\n" +
" \"parentId\":50091814,\n" +
" \"name\":\"前端七组\",\n" +
" \"status\":0,\n" +
" \"fullName\":\"应用技术研发一中心/前端研发部/前端三部/前端七组\"\n" +
" },\n" +
" {\n" +
" \"id\":50091817,\n" +
" \"parentId\":50091814,\n" +
" \"name\":\"前端八组\",\n" +
" \"status\":0,\n" +
" \"fullName\":\"应用技术研发一中心/前端研发部/前端三部/前端八组\"\n" +
" },\n" +
" {\n" +
" \"id\":50091818,\n" +
" \"parentId\":50091814,\n" +
" \"name\":\"前端九组\",\n" +
" \"status\":0,\n" +
" \"fullName\":\"应用技术研发一中心/前端研发部/前端三部/前端九组\"\n" +
" },\n" +
" {\n" +
" \"id\":50090195,\n" +
" \"parentId\":50090193,\n" +
" \"name\":\"研发一部\",\n" +
" \"status\":0,\n" +
" \"fullName\":\"应用技术研发一中心/研发一部\"\n" +
" },\n" +
" {\n" +
" \"id\":50090620,\n" +
" \"parentId\":50090195,\n" +
" \"name\":\"策略管理组\",\n" +
" \"status\":0,\n" +
" \"fullName\":\"应用技术研发一中心/研发一部/策略管理组\"\n" +
" },\n" +
" {\n" +
" \"id\":50090621,\n" +
" \"parentId\":50090195,\n" +
" \"name\":\"集中管理组\",\n" +
" \"status\":0,\n" +
" \"fullName\":\"应用技术研发一中心/研发一部/集中管理组\"\n" +
" },\n" +
" {\n" +
" \"id\":50090622,\n" +
" \"parentId\":50090195,\n" +
" \"name\":\"产品规划与设计组\",\n" +
" \"status\":0,\n" +
" \"fullName\":\"应用技术研发一中心/研发一部/产品规划与设计组\"\n" +
" },\n" +
" {\n" +
" \"id\":50090632,\n" +
" \"parentId\":50090195,\n" +
" \"name\":\"研发管理组\",\n" +
" \"status\":0,\n" +
" \"fullName\":\"应用技术研发一中心/研发一部/研发管理组\"\n" +
" },\n" +
" {\n" +
" \"id\":50091022,\n" +
" \"parentId\":50090195,\n" +
" \"name\":\"解决方案组\",\n" +
" \"status\":0,\n" +
" \"fullName\":\"应用技术研发一中心/研发一部/解决方案组\"\n" +
" },\n" +
" {\n" +
" \"id\":50091023,\n" +
" \"parentId\":50090195,\n" +
" \"name\":\"公共服务组\",\n" +
" \"status\":0,\n" +
" \"fullName\":\"应用技术研发一中心/研发一部/公共服务组\"\n" +
"\n" +
" },\n" +
" {\n" +
" \"id\":50091024,\n" +
" \"parentId\":50090195,\n" +
" \"name\":\"网络拓普组\",\n" +
" \"status\":0,\n" +
" \"fullName\":\"应用技术研发一中心/研发一部/网络拓普组\"\n" +
" },\n" +
" {\n" +
" \"id\":50090197,\n" +
" \"parentId\":50090193,\n" +
" \"name\":\"研发三部\",\n" +
" \"status\":0,\n" +
" \"fullName\":\"应用技术研发一中心/研发三部\"\n" +
" },\n" +
" {\n" +
" \"id\":50090232,\n" +
" \"parentId\":50090197,\n" +
" \"name\":\"工业安全服务端研发组\",\n" +
" \"status\":0,\n" +
" \"fullName\":\"应用技术研发一中心/研发三部/工业安全服务端研发组\"\n" +
" },\n" +
" {\n" +
" \"id\":50090631,\n" +
" \"parentId\":50090193,\n" +
" \"name\":\"设计与研发支撑部\",\n" +
" \"status\":0,\n" +
" \"fullName\":\"应用技术研发一中心/设计与研发支撑部\"\n" +
" },\n" +
" {\n" +
" \"id\":50090633,\n" +
" \"parentId\":50090193,\n" +
" \"name\":\"UED\",\n" +
" \"status\":0,\n" +
" \"fullName\":\"应用技术研发一中心/UED\"\n" +
" },\n" +
" {\n" +
" \"id\":50090799,\n" +
" \"parentId\":50090193,\n" +
" \"name\":\"武汉研发部\",\n" +
" \"status\":0,\n" +
" \"fullName\":\"应用技术研发一中心/武汉研发部\"\n" +
" },\n" +
" {\n" +
" \"id\":50090800,\n" +
" \"parentId\":50090799,\n" +
" \"name\":\"武汉前端一组\",\n" +
" \"status\":0,\n" +
" \"fullName\":\"应用技术研发一中心/武汉研发部/武汉前端一组\"\n" +
" },\n" +
" {\n" +
" \"id\":50090801,\n" +
" \"parentId\":50090799,\n" +
" \"name\":\"武汉前端二组\",\n" +
" \"status\":0,\n" +
" \"fullName\":\"应用技术研发一中心/武汉研发部/武汉前端二组\"\n" +
" }]\n";
//字符串转换为List
JSONArray jsonArray = JSONArray.parseArray(strJson);
List<Node> rootNode = (List<Node>)JSONArray.parseArray(strJson,Node.class);
// 查看结果
// for (Node node : rootNode) {
// System.out.println(node);
// }
// 最后的结果
List<Node> nodeList = new ArrayList<>();
// 先找到所有的一级节点
for (int i = 0; i < rootNode.size(); i++) {
int index = 1;
for (int j = 0; j < rootNode.size();j++) {
if(rootNode.get(i).getParentId()==rootNode.get(j).getId()){
index++;
}
}
//如果该ParentId无相等的id,则index仍然为1。将一级节点加入最后结果List中
if(index==1){
nodeList.add(rootNode.get(i));
}
}
// 为一级节点设置子节点,getChild是递归调用的
for (Node node : nodeList) {
node.setChildrenList(getChild(node.getId(), rootNode));
}
Map<String,Object> jsonMap = new HashMap<>();
jsonMap.put("node", nodeList);
System.out.println(JSONObject.toJSONString(jsonMap));
} private static List getChild(int id, List<Node> rootNode) {
// 子节点
List<Node> childList = new ArrayList<>();
for (Node node : rootNode) {
// 遍历所有节点,如果该节点的父类id等于参数id,则作为孩子节点加入该节点中
if (node.getParentId()==id) {
childList.add(node);
} }
// 把孩子节点的孩子节点循环一遍
for (Node node : childList) {
// 递归
node.setChildrenList(getChild(node.getId(), rootNode));
} // 递归退出条件
if (childList.size() == 0) {
return null;
}
return childList;
} }
 package com.example.rabbitmq2;

 import com.alibaba.fastjson.JSONObject;
import lombok.Data;
import lombok.Getter;
import lombok.Setter; import java.util.ArrayList;
import java.util.Collections;
import java.util.Iterator;
import java.util.List; @Data
public class Node {
/**
* 节点编号
*/
public int id;
/**
* 父节点编号
*/
public int parentId;
/**
* 节点名称
*/
public String name;
/**
* 节点状态
*/
public int status;
/**
* 节点全称
*/
public String fullName; /**
* 孩子节点列表
*/
private List childrenList = new ArrayList();
}

相关的博客:

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. vue 生命周期:

    vue  生命周期: 1. beforeCreate()创建组件;        2. created() 创建完成;        3. beforeMounte() 组件被挂裁前;        ...

  2. idea的maven项目无法引入junit类

    本机:java版本:1.8 pom中是junit版本:4.12 出现问题:在使用@Test 无法引入 : org.junit.Test; 解决方法:junit在pom.xml改为 4.12-beta- ...

  3. JavaWeb网上图书商城完整项目--27.注册页面之注册按钮图片切换实现

    我们要实现立即注册这个按钮,光标获得焦点是一张图片,光标失去焦点的时候是另外一张图片 我们需要在文档加载完成之后,设置该事件hover事件 hover(over,out)这是jQuery的一个模仿悬停 ...

  4. Hystrix总结

    Hystrix 能使你的系统在出现依赖服务失效的时候,通过隔离系统所依赖的服务,防止服务级联失败,同时提供失败回退机制,更优雅地应对失效,并使你的系统能更快地从异常中恢复. Hystrix能做什么? ...

  5. 用Map+函数式接口来实现策略模式

    用Map+函数式接口来实现策略模式 目前在魔都,贝壳找房是我的雇主,平时关注一些 java 领域相关的技术,希望你们能在这篇文章中找到些有用的东西.个人水平有限,如果文章有错误还请指出,在留言区一起交 ...

  6. Zookeeper分布式过程协同技术 - 部署及设置

    Zookeeper分布式过程协同技术 -  部署及设置 Zookeeper支持单机模式.伪集群模式.集群模式三种部署方式.演示部署环境为CentOS.jdk版本为1.8.Zookeeper版本为3.4 ...

  7. javadoc导出成word文档

    刚刚上次弄完了一个坑爹的任务,这次我领导又给我一个让人脑瓜子疼的任务了. 基本上客户他在验收我们系统的时候,都会要求我们编写相关的文档,这次也不例外. 只是这次的客户要求我们给出接口文档.不仅是要整个 ...

  8. HTML5实现DTMF(电话拨号按键信号)解码、编码,代码简单易于移植

    目录 一.前言 1.1 HTML5实现DTMF的一些动机 1.2 一些有效场景 (1) 10086 (2) 软电话 (3) 小玩具 二.DTMF频率按键对照表 三.DTMF信号解码 得到按键值 3.1 ...

  9. Python实用笔记 (17)模块

    一个abc.py的文件就是一个名字叫abc的模块,一个xyz.py的文件就是一个名字叫xyz的模块. 现在,假设我们的abc和xyz这两个模块名字与其他模块冲突了,于是我们可以通过包来组织模块,避免冲 ...

  10. postman无法正常启动

    想请教下各位大神,我电脑的postman打开之后就一直转,没法启动是怎么回事?重装了不同版本的也是同样的情况,重启电脑也没用...同样的安装包,在别的电脑上就能正常打开!有什么办法解决吗?  0 20 ...