递归例子(Java)
2015-06-18 09:41
477 查看
目标:把一个关系型数据库中<子,父>关系的并列型列表转换成为一个层级架构树。
DB:
parent node
------ -------
soft_1 staff_B
soft_1 staff_C
dev soft_1
dev soft_2
dev staff_A
gm_A dev
gm_A hr
gm_A market
hr staff_E
soft_2 staff_D
boss gm_A
NULL boss
最终架构树:
这种情况需要用到递归。
主程序:
FileOrganization(包含其它内容) / FileOrganizationNode(只有子、父名)
addTreeNode方法:
treeNode内容:
参考:
递归例子(Javascript)/article/9870122.html
DB:
parent node
------ -------
soft_1 staff_B
soft_1 staff_C
dev soft_1
dev soft_2
dev staff_A
gm_A dev
gm_A hr
gm_A market
hr staff_E
soft_2 staff_D
boss gm_A
NULL boss
最终架构树:
boss | gm_A | dev | soft_1 | staff_B |
staff_C | ||||
soft_2 | staff_D | |||
staff_A | ||||
market | ||||
hr | staff_E |
主程序:
FileOrganizationNode treeNode = new FileOrganizationNode(); List<FileOrganization> fileOrganizations = new ArrayList<FileOrganization>(); fileOrganizations = fileOrganizationService.findNodeByOrganizationName(organizationName, limit); treeNode.setName(rootNode.getNodeName()); addTreeNode(treeNode, rootNode.getNodeName(), fileOrganizations); // 递归插入子node* fileOrganizations 就是上面的<子,父>列表,rootNode.getNodeName() 取值为"boss"。
FileOrganization(包含其它内容) / FileOrganizationNode(只有子、父名)
/** * * file_organization * * 组织上下级关系描述 * */ public class FileOrganization { private String nodeName; private String nodeParentName; ...
public class FileOrganizationNode { private String name; private List<FileOrganizationNode> children;
addTreeNode方法:
// 递归插入子node public void addTreeNode(FileOrganizationNode treeNode, String parentNode, List<FileOrganization> fileOrganizations) { final Integer DEF_VALUE = 20; List<FileOrganizationNode> childTreeNodes = new ArrayList<FileOrganizationNode>(); for (FileOrganization fileOrganization:fileOrganizations) { if (parentNode.equals(fileOrganization.getNodeParentName())) { FileOrganizationNode childTreeNode = new FileOrganizationNode(); childTreeNode.setName(fileOrganization.getNodeName()); childTreeNode.setValue(DEF_VALUE); childTreeNode.setNodeType(fileOrganization.getNodeType()); childTreeNodes.add(childTreeNode); // 通过传参childTreeNode串联递归 addTreeNode(childTreeNode, fileOrganization.getNodeName(), fileOrganizations); } } if (!childTreeNodes.isEmpty()) { treeNode.setChildren(childTreeNodes); } }
treeNode内容:
参考:
递归例子(Javascript)/article/9870122.html
相关文章推荐
- Java微框架:不可忽视的新趋势--转载
- struts2中<s:if>标签的使用
- eclipse中将Maven Dependencies Libraries移除后的恢复办法
- Eclipse "Adb failed to restart !"
- (转)eclipse中使用git
- java -server 和 -client 的不同,及 java -server 时抛错原因
- Servlet
- springmvc 返回ModelAndView视图解析不到jsp
- Ubuntu15.04安装java8的步骤
- 动手用JAVA做个小游戏--贪吃蛇
- java 并发信号量和普通锁的区别
- java 线程栈 & java.lang.StackOverflowError
- 深入分析java线程中的volatile
- java中Base64转码与解码(加密与解密)原理与使用
- 疯狂Java学习笔记(89)-----------Java习惯用法总结
- Java: md5 加密中文 & 注意编码
- 疯狂Java学习笔记(88)-----------值得拥有的10本书
- Java构造时成员初始化的陷阱
- Eclipse控制台Console
- 再谈一次关于Java中的 AIO(异步IO) 与 NIO(非阻塞IO)