@[TOC]
说明:该文章用于目录结构递进显示
Node
package com.geespace.microservices.directory.assets.entity;
import java.util.ArrayList;
import java.util.List;
import lombok.Data;
/**
* @Author: wjq
* @Date: 2021-03-14 13:46
* @Version 1.0
*/
@Data
public class Node {
/**
* 名称
*/
private String name;
/**
* id
*/
private Long id;
/**
* pid
*/
private Long pid;
/**
* 子目录
*/
private List<Node> children = new ArrayList();
}
ConstructTree
package com.geespace.microservices.directory.assets.util;
import java.util.ArrayList;
import java.util.HashMap;
import com.alibaba.fastjson.JSONObject;
import com.geespace.microservices.directory.assets.dto.DirectoryAssetsDto;
import com.geespace.microservices.directory.assets.entity.Node;
import org.springframework.stereotype.Component;
/**
* @Author: wjq
* @Date: 2021-03-12 16:39
* @Version 1.0
*/
@Component
public class ConstructTree {
public static final int ROOTPID = -1;
public static final int CAPACITY = 100;
/**
* constructLinks
*
* @param directoryList directoryList
* @return 结果
*/
public Node constructLinks(ArrayList<DirectoryAssetsDto> directoryList) {
Long rootId = null;
HashMap<Long, Node> nodeMap = new HashMap<>(CAPACITY);
for (DirectoryAssetsDto directoryInfo:directoryList) {
Node tempNode = new Node();
tempNode.setId(directoryInfo.getId());
tempNode.setName(directoryInfo.getName());
tempNode.setPid(directoryInfo.getPid());
nodeMap.put(directoryInfo.getId(), tempNode);
if (directoryInfo.getPid() == ROOTPID) {
rootId = directoryInfo.getId();
}
}
for (Long key: nodeMap.keySet()) {
Long pid = nodeMap.get(key).getPid();
if (pid != ROOTPID) {
nodeMap.get(pid).getChildren().add(nodeMap.get(key));
}
}
Node root = nodeMap.get(rootId);
return root;
}
/**
*
* @param node node
* @return json
*/
public JSONObject constructJS(Node node) {
JSONObject jsonObject = new JSONObject();
ArrayList<JSONObject> children = new ArrayList<>();
for (Node child: node.getChildren()) {
children.add(this.constructJS(child));
}
jsonObject.put("children", children);
jsonObject.put("id", node.getId());
jsonObject.put("name", node.getName());
return jsonObject;
}
/**
*
* @param data data
* @return jason
*/
public JSONObject method(ArrayList<DirectoryAssetsDto> data) {
Node root = this.constructLinks(data);
return this.constructJS(root);
}
}
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。