@Data public class TreeNode { /** * 节点id */ private String id; /** * 节点名称 */ private String name; /** * 层级 */ private int level; /** * 父节点id */ private String parentId; /** * 子节点 */ private List<TreeNode> children = new ArrayList<>(); public TreeNode() {} public TreeNode(String id, String parentId, String name) { this.id = id; this.name = name; this.parentId = parentId; } public TreeNode(String id, String name, int level, String parentId) { this.id = id; this.name = name; this.level = level; this.parentId = parentId; } public void addChild(TreeNode node) { this.children.add(node); } }
public class TreeNodeUtil { public static List<TreeNode> buildTree(List<TreeNode> orginals){ // 创建Map,把所有原始数据的ID作为Key,原始数据对象作为VALUE Map<String, TreeNode> dataMap = new LinkedHashMap<>(); for (TreeNode node : orginals) { dataMap.put(node.getId(), node); } List<TreeNode> result = new ArrayList<>(); for (Map.Entry<String, TreeNode> entry : dataMap.entrySet()) { TreeNode node = entry.getValue(); if (node.getParentId().equals("0")) { // 如果是顶层节点,直接添加到结果集合中 result.add(node); } else { // 如果不是顶层节点,找到父节点,然后添加到父节点的子节点中 if (dataMap.get(node.getParentId()) != null) { dataMap.get(node.getParentId()).addChild(node); } } } return result; } public static void main(String[] args) { List<TreeNode> orginals = new ArrayList<>(); for (int i = 1; i <= 1000; i++) { orginals.add(new TreeNode(i+"", "0", "name" + i)); } for (int i = 1001; i <= 2000; i++) { orginals.add(new TreeNode(i+"", "1", "name" + i)); } for (int i = 2001; i <= 3000; i++) { orginals.add(new TreeNode(i+"", "1001", "name" + i)); } for (int i = 3001; i <= 4000; i++) { orginals.add(new TreeNode(i+"", "2001", "name" + i)); } for (int i = 4001; i <= 5000; i++) { orginals.add(new TreeNode(i+"", "3001", "name" + i)); } for (int i = 5001; i <= 6000; i++) { orginals.add(new TreeNode(i+"", "4001", "name" + i)); } long start = System.currentTimeMillis(); System.out.println("数据大小:"+orginals.size()); List<TreeNode> treeNodes = TreeNodeUtil.buildTree(orginals); // System.out.println(JSONUtil.toJsonStr(treeNodes)); System.out.println("耗时:"+(System.currentTimeMillis() - start)); } }
标签:node,TreeNode,String,递归,public,构建,parentId,快速,id From: https://www.cnblogs.com/sunhao1234/p/18395783