package com.flyby.center.hotel.model.threadLocal;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import java.util.ArrayList;
import java.util.List;
public class Node2 {
static String t = "[\n" +
" {\n" +
" "name":"主标题A",\n" +
" "level":0\n" +
" },\n" +
" {\n" +
" "name":"副标题A1",\n" +
" "level":1\n" +
" },\n" +
" {\n" +
" "name":"次副标题A11",\n" +
" "level":2\n" +
" },\n" +
" {\n" +
" "name":"副标题A2",\n" +
" "level":1\n" +
" },\n" +
" {\n" +
" "name":"副标题A3",\n" +
" "level":1\n" +
" },\n" +
" {\n" +
" "name":"主标题B",\n" +
" "level":0\n" +
" },\n" +
" {\n" +
" "name":"副标题B1",\n" +
" "level":1\n" +
" }\n" +
"]";
public static void main(String[] args) {
tree();
}
static class Node{
public Integer level;
public transient Node parent;
public List<Node> subNodes;
public String name;
public Node(Integer level, String name){
this.level = level;
this.name = name;
}
}
private static Node findParent(Node temp, Node self) {
// if(temp == null||temp.parent ==null) return null;
// for (temp = temp.parent; temp.level<self.level;){
// System.out.println("wwwww");
// return temp;
// }
// return null;
while (true) {
if(temp == null)
return null;
if (temp.level + 1 == self.level)
return temp;
else
temp = findParent(temp.parent, self);
}
}
public static void tree(){
List<Node> nodeList = new ArrayList<>();
JSONArray objects = JSON.parseArray(t);
Node commonParent = null;
Node preNode =null;
for (int i = 0; i < objects.size(); i++) {
JSONObject object = objects.getJSONObject(i);
Node node = new Node(object.getInteger("level"), object.getString("name"));
if(node.level==0) {
nodeList.add(node);
}
if(preNode!=null){
if (node.level < preNode.level)
commonParent = findParent(preNode, node);
else if(node.level==preNode.level)
commonParent = preNode.parent;
else if(node.level==preNode.level+1)
commonParent = preNode;
}
if(commonParent!=null) {
node.parent = commonParent ;
List<Node> subNodes = commonParent.subNodes;
if (subNodes == null)
commonParent.subNodes = new ArrayList<>();
commonParent.subNodes.add(node);
}
preNode = node;
}
System.out.println(JSON.toJSONString(nodeList, true));
}
}
这类适用于比如外部导入文本文件,没有标识id, 比较松散的数据结构处理.