java 根据 根节点及所有子成员 构造树tree
实体类entity
package com.ompa.biz.entity; import java.util.ArrayList;
import java.util.List; public class TreeEntity { private String id;
private String name;
private String fatherId;
private int level;
private boolean isleaf;
private List<TreeEntity> childList = new ArrayList<TreeEntity>(); public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getFatherId() {
return fatherId;
}
public void setFatherId(String fatherId) {
this.fatherId = fatherId;
}
public int getLevel() {
return level;
}
public void setLevel(int level) {
this.level = level;
}
public boolean isIsleaf() {
return isleaf;
}
public void setIsleaf(boolean isleaf) {
this.isleaf = isleaf;
}
public List<TreeEntity> getChildList() {
return childList;
}
public void setChildList(List<TreeEntity> childList) {
this.childList = childList;
} }
构造树util,调用时直接调用getTreeList(父节点,父节点下所有的子成员)
package com.ompa.utils; import java.util.ArrayList;
import java.util.List; import org.apache.commons.collections.CollectionUtils; import com.ompa.biz.entity.TreeEntity; /**
* 树结构工具类
* <p>Title:TreeUtil </p>
* @author zhangcd
* @date 2016年11月10日
*/
public class TreeUtil { /**
* 根据父节点,将子节点一次累计起来
* @author zhangcd
* @date 2016年11月10日上午9:40:33
* @param root
* @param childList
* @return
*/
public TreeEntity getTreeList(TreeEntity root,List<TreeEntity> childList){
root.setLevel(1);
findChildren(root,childList);
return root;
} private List<TreeEntity> findChildren(TreeEntity root, List<TreeEntity> allNodes) {
List<TreeEntity> children = new ArrayList<TreeEntity>(); for (TreeEntity comparedOne : allNodes) {
if (comparedOne.getFatherId().equals(root.getId())) {
root.getChildList().add(comparedOne);
comparedOne.setLevel(root.getLevel() + 1);
children.add(comparedOne);
}
}
List<TreeEntity> notChildren = (List<TreeEntity>) CollectionUtils.subtract(allNodes, children); for (TreeEntity child : children) {
List<TreeEntity> tmpChildren = findChildren(child, notChildren);
if (tmpChildren == null || tmpChildren.size() < 1) {
child.setIsleaf(true);
} else {
child.setIsleaf(false);
}
// child.setChildren(tmpChildren);
}
return children;
} /**
* 得到深度
*
* @author zhangcd
* @date 2016-6-13
* @param rowspan
* @param step
* @return
*/
private int getrowspan(int rowspan,TreeEntity step){
if(step.getChildList() != null && step.getChildList().size()>0){
for(TreeEntity steps:step.getChildList()){
if(rowspan < steps.getLevel()){
rowspan = steps.getLevel();
}
rowspan = getrowspan(rowspan,steps);
}
}
return rowspan;
} /**
* 合并列数
*
* @author zhangcd
* @date 2016-6-12
* @param colspan
* @param step
* @return
*/
private int getcolspan(int colspan,TreeEntity step){
if(step.getChildList() != null && step.getChildList().size()>0){
for(TreeEntity steps:step.getChildList()){
colspan = getcolspan(colspan,steps);
}
}else{
colspan ++;
}
return colspan;
} }
java 根据 根节点及所有子成员 构造树tree的更多相关文章
- 我眼中的Linux设备树(五 根节点)
五 根节点一个最简单的设备树必须包含根节点,cpus节点,memory节点.根节点的名字及全路径都是"/",至少需要包含model和compatible两个属性.model属性我们 ...
- Linux设备树(五 根节点)
五 根节点 一个最简单的设备树必须包含根节点,cpus节点,memory节点.根节点的名字及全路径都是“/”,至少需要包含model和compatible两个属性.model属性我们在属性那节已经说过 ...
- Java获取XML节点总结之读取XML文档节点
dom4j是Java的XML API,用来读写XML文件的.目前有很多场景中使用dom4j来读写xml的.要使用dom4j开发,需要下载导入dom4j相应的jar文件.官网下载:http://www. ...
- java对xml节点属性的增删改查
学习本文之前请先看我的另一篇文章JAVA对XML节点的操作可以对XML操作有更好的了解. package vastsum; import java.io.File; import java.io.Fi ...
- 【转】 oracle 层次查询判断叶子和根节点
Oracle 9i判断是叶子或根节点,是比较麻烦的一件事情,SQL演示脚本如下: DROP TABLE idb_hierarchical; create TABLE idb_hierarchical ...
- HDU 1890 - Robotic Sort - [splay][区间反转+删除根节点]
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1890 Time Limit: 6000/2000 MS (Java/Others) Memory Li ...
- 用JS实现点击TreeView根节点复选框全选
以下两种方法哪个不报错就用哪个.用法都是在TreeView标签中加入OnClick="",然后引入函数名即可 第一种方法:(摘自:http://www.cnblogs.com/fr ...
- xml文件的根节点layout_width或者layout_height设置无效果的原因分析
在android开发中相信大家对ListView.GridView等组建都非常熟悉,在使用它们的时候须要自己配置相关的Adapter,而且配置现骨干的xml文件作为ListView等组建的子View, ...
- 使用JLDAP操作LDAP,包含匿名连接、ldif导入导出、获取根节点、对数据的操作、LDAP错误码解析等
bean类 package com.cn.ccc.ggg.ldap.model; import javax.persistence.Entity; import javax.persistence.T ...
随机推荐
- 自定义ConfigurationSection,创建多个嵌套的ConfigurationElementCollection节点
由于接口地址都是固定的,所以想到使用自定义节点,来将接口都配置到web.config中. 很快,v1.0版本出炉: public class RequestConfigSection : Config ...
- Winform开发框架主界面设计展示
做了好多年Winform的程序的开发,主窗口的界面设计一般都要求做的更好一些,可以根据不同的系统功能模块进行归类整合,能使客户迅速寻找到相关功能的同时,也能感觉到整体性的美观大方,因此主窗口的界面设计 ...
- Opserver监控工具的使用
Opserver监控工具的使用 Opserver是Stack Overflow的开源监控解决方案,由Stack Exchange发布,基于.NET框架构建.开源地址:https://github.co ...
- CMS如何提供XML格式的接口
在做APP的过程中,需要服务端的接口数据. 是用Json格式还是Xml格式呢,很多人会说还是xml习惯. 然而PHP更适合返回的还是json,php核心库中就包含了json编码的函数,可以直接将数组转 ...
- HDU 2577---How to Type
HDU 2577 Description Pirates have finished developing the typing software. He called Cathy to test ...
- 二、SQL语句映射文件(1)resultMap
//备注:该博客引自:http://limingnihao.iteye.com/blog/106076 SQL 映射XML 文件是所有sql语句放置的地方.需要定义一个workspace,一般定义为对 ...
- 性能分析之-- JAVA Thread Dump 分析综述
性能分析之-- JAVA Thread Dump 分析综述 一.Thread Dump介绍 1.1什么是Thread Dump? Thread Dump是非常有用的诊断Java应用问题的工 ...
- Python函数:一个简单的迭代
#!/usr/bin/env python # -*- coding: utf-8 -*- def fact(n): if n == 1 : return 1 return n * fact(n-1) ...
- bootstrap dialog自行控制窗口的关闭
在使用dialog的时候,我们通常不希望点击btn的时候自动隐藏dialog,通常需要做一些清理或者ajax操作,在bootstrap dialog中,这是通过 data-dismiss=" ...
- 终端&作业控制&会话启动过程
进程组 每个进程除了有个进程id外,还属于一个进程组.进程组是一个或者多个进程的集合.通常他们与同一个作业相关联,可以接受来自同一终端的信号.进程组id等于其进程组长id.进程组的终止与进程组长是否存 ...