@
目录
- 说明:该文章用于目录结构递进显示
- Node
- ConstructTree
说明:该文章用于目录结构递进显示
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);}
}