文章出自:http://www.cnblogs.com/dingyingsi/p/3699870.html
maven pom.xml
<dependency> <groupId>commons-collections</groupId> <artifactId>commons-collections</artifactId> <version>3.2.1</version> </dependency>
TreeBuilder.java
package com.yusj; import java.util.ArrayList; import java.util.List; import org.apache.commons.collections.CollectionUtils; public class TreeBuilder { @SuppressWarnings("unchecked") private List<Node> buildListToTree(List<Node> dirs) { List<Node> roots = findRoots(dirs); List<Node> notRoots = (List<Node>) CollectionUtils .subtract(dirs, roots); for (Node root : roots) { root.setChildren(findChildren(root, notRoots)); } return roots; } public List<Node> findRoots(List<Node> allNodes) { List<Node> results = new ArrayList<Node>(); for (Node node : allNodes) { boolean isRoot = true; for (Node comparedOne : allNodes) { if (node.getParentId() == comparedOne.getId()) { isRoot = false; break; } } if (isRoot) { node.setLevel(0); results.add(node); node.setRootId(node.getId()); } } return results; } @SuppressWarnings("unchecked") private List<Node> findChildren(Node root, List<Node> allNodes) { List<Node> children = new ArrayList<Node>(); for (Node comparedOne : allNodes) { if (comparedOne.getParentId() == root.getId()) { comparedOne.setParent(root); comparedOne.setLevel(root.getLevel() + 1); children.add(comparedOne); } } List<Node> notChildren = (List<Node>) CollectionUtils.subtract(allNodes, children); for (Node child : children) { List<Node> tmpChildren = findChildren(child, notChildren); if (tmpChildren == null || tmpChildren.size() < 1) { child.setLeaf(true); } else { child.setLeaf(false); } child.setChildren(tmpChildren); } return children; } private List<Node> getLeafChildren(List<Node> resultList, List<Node> children){ for(Node node : children){ if(node.isLeaf()){ resultList.add(node); }else{ getLeafChildren(resultList, node.getChildren()); } } return resultList; } public static void main(String[] args) { TreeBuilder tb = new TreeBuilder(); List<Node> allNodes = new ArrayList<Node>(); allNodes.add(new Node(1, 0, "节点1")); allNodes.add(new Node(2, 0, "节点2")); allNodes.add(new Node(3, 0, "节点3")); allNodes.add(new Node(4, 1, "节点4")); allNodes.add(new Node(5, 1, "节点5")); allNodes.add(new Node(6, 1, "节点6")); allNodes.add(new Node(7, 4, "节点7")); allNodes.add(new Node(8, 4, "节点8")); allNodes.add(new Node(9, 5, "节点9")); allNodes.add(new Node(10, 5, "节点10")); allNodes.add(new Node(11, 7, "节点11")); allNodes.add(new Node(12, 7, "节点12")); // 显示所有节点 List<Node> roots = tb.buildListToTree(allNodes); for (Node n : roots) { System.out.println(n); } System.out.println("------------------"); // 查找所有子节点 List<Node> children = tb.findChildren(new Node(1, 0, "节点1"), allNodes); for (Node n : children) { System.out.println(n); } // 查找所有叶子节点 System.out.println("------------------"); List<Node> resultList = tb.getLeafChildren(new ArrayList<Node>(), children); for (Node n : resultList) { System.out.println(n); } } }
Node.java
package com.yusj; import java.util.List; public class Node implements java.io.Serializable { private static final long serialVersionUID = -2721191232926604726L; private int id; private int parentId; private Node parent; private List<Node> children; private String name; private int level; private int sort; private int rootId; private String type; private boolean isLeaf; private String description; public Node() { super(); } public Node(int id, int parentId, String name) { super(); this.id = id; this.parentId = parentId; this.name = name; } public String getDescription() { return description; } public void setDescription(String description) { this.description = description; } public int getId() { return id; } public void setId(int id) { this.id = id; } public Node getParent() { return parent; } public void setParent(Node parent) { this.parent = parent; } public int getParentId() { return parentId; } public void setParentId(int parentId) { this.parentId = parentId; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getLevel() { return level; } public void setLevel(int level) { this.level = level; } public String getType() { return type; } public List<Node> getChildren() { return children; } public void setChildren(List<Node> children) { this.children = children; } public void setType(String type) { this.type = type; } public boolean isLeaf() { return isLeaf; } public void setLeaf(boolean isLeaf) { this.isLeaf = isLeaf; } public int getSort() { return sort; } public void setSort(int sort) { this.sort = sort; } public int getRootId() { return rootId; } public void setRootId(int rootId) { this.rootId = rootId; } @Override public int hashCode() { final int prime = 31; int result = 1; result = prime * result + id; result = prime * result + parentId; return result; } @Override public boolean equals(Object obj) { if (this == obj) return true; if (obj == null) return false; if (getClass() != obj.getClass()) return false; Node other = (Node) obj; if (id != other.id) return false; if (parentId != other.parentId) return false; return true; } @Override public String toString() { return "Node {id=" + id + ", parentId=" + parentId + ", children=" + children + ", name=" + name + ", level =" + level + ", isLeaf =" + isLeaf + "}"; } }
shell
---------所有节点--------- Node {id=1, parentId=0, children=[Node {id=4, parentId=1, children=[Node {id=7, parentId=4, children=[Node {id=11, parentId=7, children=[], name=节点11, level =3, isLeaf =true}, Node {id=12, parentId=7, children=[], name=节点12, level =3, isLeaf =true}], name=节点7, level =2, isLeaf =false}, Node {id=8, parentId=4, children=[], name=节点8, level =2, isLeaf =true}], name=节点4, level =1, isLeaf =false}, Node {id=5, parentId=1, children=[Node {id=9, parentId=5, children=[], name=节点9, level =2, isLeaf =true}, Node {id=10, parentId=5, children=[], name=节点10, level =2, isLeaf =true}], name=节点5, level =1, isLeaf =false}, Node {id=6, parentId=1, children=[], name=节点6, level =1, isLeaf =true}], name=节点1, level =0, isLeaf =false} Node {id=2, parentId=0, children=[], name=节点2, level =0, isLeaf =false} Node {id=3, parentId=0, children=[], name=节点3, level =0, isLeaf =false} ---------<节点1>子节点--------- Node {id=4, parentId=1, children=[Node {id=7, parentId=4, children=[Node {id=11, parentId=7, children=[], name=节点11, level =3, isLeaf =true}, Node {id=12, parentId=7, children=[], name=节点12, level =3, isLeaf =true}], name=节点7, level =2, isLeaf =false}, Node {id=8, parentId=4, children=[], name=节点8, level =2, isLeaf =true}], name=节点4, level =1, isLeaf =false} Node {id=5, parentId=1, children=[Node {id=9, parentId=5, children=[], name=节点9, level =2, isLeaf =true}, Node {id=10, parentId=5, children=[], name=节点10, level =2, isLeaf =true}], name=节点5, level =1, isLeaf =false} Node {id=6, parentId=1, children=[], name=节点6, level =1, isLeaf =true} --------<节点1>叶子节点---------- Node {id=11, parentId=7, children=[], name=节点11, level =3, isLeaf =true} Node {id=12, parentId=7, children=[], name=节点12, level =3, isLeaf =true} Node {id=8, parentId=4, children=[], name=节点8, level =2, isLeaf =true} Node {id=9, parentId=5, children=[], name=节点9, level =2, isLeaf =true} Node {id=10, parentId=5, children=[], name=节点10, level =2, isLeaf =true} Node {id=6, parentId=1, children=[], name=节点6, level =1, isLeaf =true}
相关推荐
利用jxl包结合java反射机制和注释,直接把list生成对应的Excel文件,即只需传入list、对应生成的对象、标题就可以生成excel文件write(String title, List list,Class c),实现一个简单生成excel工具类
在Java编程中,遍历文件目录并生成树结构的文本文件是一个常见的任务,尤其是在处理大量文件数据时。这个任务可以通过使用Java的`java.io.File`类及其相关API来实现。`Dir.class`和`Dir.java`是这次操作的核心文件,...
"List转树形结构工具类"是一个实用的工具,它可以帮助开发者将扁平化的数据结构(如List)转换为层次化的树形结构。这在处理组织结构、文件系统、菜单栏等场景时非常有用。下面我们将深入探讨这个工具类的工作原理、...
当处理XML文件时,有时我们需要将其内容转换为Java对象,如List,以便于操作和处理。本篇文章将深入探讨如何将XML转换为指定类型的List数组,并涉及多层数据结构的处理。 1. **Java XML解析库** 在Java中,有多种...
可以使用`java.io.File`类的`listFiles()`方法获取目录下的所有文件和子目录。对于每个子目录,再次调用此方法,直到遍历完整个目录树。 2. **构建目录树模型**:在遍历过程中,创建一个数据结构来存储目录树信息。...
本主题关注的是如何使用Java语言实现最小生成树,并通过动态显示的方式来直观地展示算法的过程。 普利姆算法(Prim's Algorithm)和克鲁斯卡尔算法(Kruskal's Algorithm)是两种常用的求解最小生成树的方法。 1. ...
4、优点:使用代码生成驼峰形式的字段,可以减少出错概率,生成的实体类字段符合Java命名规范,易于阅读和理解。 5、使用示例:将"TITLE \n" +"COMPANY "可以转换为 /** * TITLE */ @Column(name = ...
在Java编程中,将List对象转换为Excel文件是一项常见的任务,尤其在数据处理和报告生成时。本项目“Java list转excel.zip”提供了一个解决方案,它涵盖了如何利用Java的库来实现这一转换的过程。以下是对这个主题的...
"java转换xml、list、map和json" 本文主要讲述了Java中将xml、list、map和json之间的转换的相关知识点。 xml和map之间的转换 在Java中,xml和map之间的转换可以通过使用dom4j库来实现。dom4j是一个Java开源库,...
在IT行业中,尤其是在Java开发领域,有时候我们需要生成各种类型的输出,比如表格图片。这在处理数据可视化、报表生成、邮件附件或彩信内容时尤其有用。`Java 原生生成表格图片`这个主题就是关于如何利用Java编程...
### Java代码生成树工具知识点详解 #### 一、概述 在本篇学习笔记中,我们将深入探讨一个基于Java实现的树形数据结构处理工具——`TreeUtil`类。该类主要用于构建和操作树形结构的数据,例如组织架构、文件目录等...
此java类实现了对数据表的分类递归树的实现,为本人倾力之作,后期,会发布js版,敬请期待!
在Java编程中,生成树形文件目录是一项常见的任务,它涉及到文件系统操作和数据结构的知识。这个任务的主要目的是创建一个程序,能够以树状结构显示计算机中的文件和目录,类似于Windows资源管理器中的视图。这里...
### JAVA生成树Service层代码详解 #### 背景与目的 在开发具有层次结构的数据展示功能时,例如产品分类、组织架构等场景,我们常常需要构建一个可视化的树形结构来直观展示这些数据。本篇文章将深入探讨如何在Java...
"java行转列"这个主题是数据处理中的一个常见需求,尤其是在数据分析、报表生成或数据显示时。当我们从数据库中获取数据,有时会遇到单个字段的数据需要在用户界面上以列的形式展示,这时就需要进行数据的行列转换。...
tableList:配置成数据库表名,中间以逗号隔开 2、配置start.bat 配置config.path=本地的mybatisplus.json路径,使用正斜杠/ 3、可按照资源中提供的建表sql导入到数据库,然后双加start.bat,即可在上方配置的...
List<Student> list = new ArrayList(); Random rnd = new Random(); for (int i = 0; i ; i++) { Student student = new Student(); student.setCj(rnd.nextDouble()*100); student.setName("name"+i); list....
本篇文章将深入探讨如何将Java中的List和Map对象转化为JSON格式,并涉及与AJAX交互的相关知识。 1. **Java JSON库**: 在Java中,我们可以使用多种库来实现对象到JSON的转换,如Jackson、Gson、Fastjson等。这里以...
同时,也涉及了List转换和list转换为JsonArray的相关知识,这些内容是Java开发中常见的数据结构转换方法,对于前端和后端数据交互尤为重要。在实际开发过程中,根据不同的需求场景选择合适的方法来实现数据结构转换...
在Java编程领域,生成Excel表格是一项常见的需求,尤其在数据导出、报表生成或数据分析时。本主题聚焦于“java代码生成excel表并下载”,这是一个关键的后端功能,允许用户自定义表格内容并选择下载路径。下面我们将...