Java List 生成 树:http://ysj5125094.iteye.com/blog/2283159
maven pom.xml
<dependency> <groupId>commons-collections</groupId> <artifactId>commons-collections</artifactId> <version>3.2.1</version> </dependency>
TreeBuilder.java
package com.yusj.util.tree; import java.util.ArrayList; import java.util.List; import org.apache.commons.collections.CollectionUtils; import org.apache.commons.lang3.StringUtils; import com.alibaba.fastjson.JSON; import lac.framework.support.dictionary.domain.Dictionary; public class TreeBuilder { @SuppressWarnings("unchecked") public List<? extends Node> buildListToTree(List<? extends 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; } private List<Node> findRoots(List<? extends Node> allNodes) { List<Node> results = new ArrayList<Node>(); for (Node node : allNodes) { boolean isRoot = true; for (Node comparedOne : allNodes) { if (StringUtils.isNotBlank(node.getParentId()) && node.getParentId().equals(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 (StringUtils.isNotBlank(comparedOne.getParentId()) && comparedOne.getParentId().equals(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; } @SuppressWarnings("unchecked") public static void main(String[] args) throws Exception { TreeBuilder tb = new TreeBuilder(); List<Node> allNodes = new ArrayList<Node>(); allNodes.add(new Dictionary("1", "0", "001", "节点001", 0)); allNodes.add(new Dictionary("2", "0", "002", "节点002", 0)); allNodes.add(new Dictionary("3", "0", "003", "节点003", 0)); allNodes.add(new Dictionary("4", "1", "004", "节点004", 0)); allNodes.add(new Dictionary("5", "1", "005", "节点005", 0)); allNodes.add(new Dictionary("6", "1", "006", "节点006", 0)); allNodes.add(new Dictionary("7", "4", "007", "节点007", 0)); allNodes.add(new Dictionary("8", "4", "008", "节点008", 0)); allNodes.add(new Dictionary("9", "5", "009", "节点009", 0)); allNodes.add(new Dictionary("10", "5", "010", "节点010", 0)); allNodes.add(new Dictionary("11", "7", "011", "节点011", 0)); allNodes.add(new Dictionary("12", "7", "012", "节点012", 0)); // 显示所有节点 List<Node> roots = (List<Node>) tb.buildListToTree(allNodes); for (Node n : roots) { System.out.println(JSON.toJSONString(n)); } // 查找所有子节点 List<Node> children = tb.findChildren(new Dictionary("1", "0"), allNodes); for (Node n : children) { System.out.println(JSON.toJSONString(n)); } // 查找所有叶子节点 System.out.println("------------------"); List<Node> resultList = tb.getLeafChildren(new ArrayList<Node>(), children); for (Node n : resultList) { System.out.println(JSON.toJSONString(n)); } } }
Node.java(待转换的bean必须继承该类)
package com.yusj.util.tree; import java.util.List; import com.fasterxml.jackson.annotation.JsonIgnore; import lac.framework.core.entity.IdEntity; public class Node extends IdEntity{ /** * */ private static final long serialVersionUID = 8875995344582620331L; private String parentId; private Node parent; private List<Node> children; private int level; private String rootId; private boolean leaf; public Node(){} public Node(String id, String parentId){ this.setId(id); this.parentId = parentId; } public String getParentId() { return parentId; } public void setParentId(String parentId) { this.parentId = parentId; } @JsonIgnore public Node getParent() { return parent; } public void setParent(Node parent) { this.parent = parent; } public List<Node> getChildren() { return children; } public void setChildren(List<Node> children) { this.children = children; } public int getLevel() { return level; } public void setLevel(int level) { this.level = level; } public String getRootId() { return rootId; } public void setRootId(String rootId) { this.rootId = rootId; } public boolean isLeaf() { return leaf; } public void setLeaf(boolean leaf) { this.leaf = leaf; } }
Dictionary.java
package com.yusj.support.dictionary.domain; import com.yusj.util.tree.Node; public class Dictionary extends Node{ /** * */ private static final long serialVersionUID = 8875995344582620331L; private String code; private String label; private Integer sort; public Dictionary(){} public Dictionary(String id, String parentId){ super(id, parentId); } public Dictionary(String id, String parentId, String code, String label, Integer sort){ super(id, parentId); this.code = code; this.label = label; this.sort = sort; } public String getCode() { return code; } public void setCode(String code) { this.code = code; } public String getLabel() { return label; } public void setLabel(String label) { this.label = label; } public Integer getSort() { return sort; } public void setSort(Integer sort) { this.sort = sort; } }
相关推荐
在Java开发中,生成Word文档是一项常见的需求,例如在报告生成、数据导出等场景。RtfTemplate是一个方便的工具库,它可以帮助开发者快速、高效地生成Word文档,特别是基于RTF(Rich Text Format)格式的文件。这个库...
EasyPOI是Apache POI的增强版,主要用于简化Java操作Excel的工作。Apache POI是一个开源库,允许开发者在Java中读写Microsoft Office格式的文件,包括Excel。EasyPOI在Apache POI的基础上提供了更丰富的API,使得...
Java API_5.0中文版是Sun Microsystems(后被Oracle收购)官方发布的文档,是Java学习者的重要参考资料。 在Java API 5.0中,有以下几个重要的知识点: 1. **泛型(Generics)**:Java 5.0引入了泛型,允许在类、...
`java.util`包含集合框架、日期时间、随机数生成等;`java.io`则涉及输入/输出流操作。 2. **网络编程**:`java.net`包提供了网络通信的支持,包括Socket和ServerSocket类,用于实现客户端和服务器端的连接。 3. *...
Java API文档是Java开发者不可或缺的参考资料,它详细地介绍了Java平台标准版(Java SE)的各种类库、接口和实现。这个“Java API文档中文版.zip”包含了一个.chm( Compiled HTML Help)文件,这是一种常见的帮助...
对于Java 7解压版,用户只需将压缩包解压到指定位置,然后设置环境变量`JAVA_HOME`指向JDK的安装目录,`PATH`添加`%JAVA_HOME%\bin`,确保系统可以在任何位置执行Java命令。 5. **使用注意事项** - 避免与其他...
`java.util`包提供了大量实用工具类,如集合框架(List、Set、Map)、日期和时间类(Date、Calendar)、随机数生成器(Random)等。集合框架是Java编程中的核心部分,允许开发者存储、管理和操作对象集合。 `java....
5. **Stream API**:`java.util.stream`包,提供了一种处理大量数据的新方式,支持并行操作,增强了集合的处理能力。 6. **日期和时间API**:`java.time`包,取代了过时的`java.util.Date`和`java.util.Calendar`,...
《Java核心技术(第8版)》是Java编程领域的一本经典教材,全面涵盖了Java语言的基础和高级特性。源码是理解书本理论的最佳实践,它提供了丰富的实例,帮助读者深入理解Java编程的本质。以下是根据标题和描述所涉及的...
《JAVA核心学习第10版》是一本深受Java开发者欢迎的经典教材,全面涵盖了Java编程的基础与进阶知识。这本书的第10版更是融入了最新的技术发展和更新,旨在为读者提供最前沿的Java学习体验。以下是根据书名、描述以及...
Java 8允许接口定义私有方法和静态方法,增强了接口的灵活性。 以上这些特性都在"java8中文文档API"中有所详细介绍,通过这个文档,开发者可以深入理解Java 8的新特性和使用方法,提升开发效率。
3. **集合框架**:Java集合框架提供了各种容器(如ArrayList、LinkedList、HashMap等)和接口(如List、Set、Map),是组织和管理数据的核心工具。 4. **IO与NIO**:Java的输入/输出(IO)系统允许程序读写文件和...
Java 1.7 开发文档中文版是Java程序员在进行1.7版本编程时不可或缺的参考资料,它详尽地介绍了该版本中包含的各种类库、接口、方法以及异常处理等核心概念。这份文档以中文呈现,对于国内开发者来说,无疑提高了理解...
Java JDK(Java Development Kit)是Oracle公司提供的用于开发和运行Java应用程序的软件开发工具包。JDK包含了编译器、调试器、Java运行时环境(JRE)以及其他辅助工具,使得开发者能够在各种平台上进行Java程序的...
《Java 高级编程(第2版)》是一本深入探讨Java编程技术的权威书籍,旨在帮助读者掌握Java语言的高级特性和最佳实践。书中涵盖了广泛的Java开发主题,旨在提升开发者在实际项目中的技能和效率。这个压缩包包含了与...
《Java核心技术第七版源代码卷二》是一本深入解析Java编程技术的重要参考资料,它涵盖了Java开发中的核心概念、原理及实战应用。这份压缩包包含了该书的所有实例代码,供学习者进行实践操作和深入理解。这里我们将...
淘宝开放平台JAVA版SDK top4java 设计原则 容易维护扩展(不需要修改主类就可以添加新的API支持) 注入型解释器(依据不同的返回格式注入相应的解释器) 集中管理请求参数与参数映射 以运行时异常的方式来管理错误的...
Java类库是Java平台标准版(Java SE)的一部分,其中包括核心类库如`java.lang`、`java.util`和`java.io`等。这些类库极大地简化了程序员的工作,因为他们无需从零开始编写所有基础功能。 接下来,我们讨论Java包。...
Java API 1.6 和 1.7 是Java开发的关键组成部分,它们包含了Java标准库的详细文档,这些库是编写Java应用程序和服务器端程序的基础。这两个版本在Java发展历程中占据了重要地位,引入了许多新特性,优化了性能,并...
4. **集合框架**:Java集合框架是处理对象组的一个核心部分,包括List、Set、Map接口及其实现类,如ArrayList、HashSet、HashMap等。了解它们的特点和应用场景对于编写高效代码至关重要。 5. **输入/输出(I/O)**:...