实体类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的更多相关文章

  1. 我眼中的Linux设备树(五 根节点)

    五 根节点一个最简单的设备树必须包含根节点,cpus节点,memory节点.根节点的名字及全路径都是"/",至少需要包含model和compatible两个属性.model属性我们 ...

  2. Linux设备树(五 根节点)

    五 根节点 一个最简单的设备树必须包含根节点,cpus节点,memory节点.根节点的名字及全路径都是“/”,至少需要包含model和compatible两个属性.model属性我们在属性那节已经说过 ...

  3. Java获取XML节点总结之读取XML文档节点

    dom4j是Java的XML API,用来读写XML文件的.目前有很多场景中使用dom4j来读写xml的.要使用dom4j开发,需要下载导入dom4j相应的jar文件.官网下载:http://www. ...

  4. java对xml节点属性的增删改查

    学习本文之前请先看我的另一篇文章JAVA对XML节点的操作可以对XML操作有更好的了解. package vastsum; import java.io.File; import java.io.Fi ...

  5. 【转】 oracle 层次查询判断叶子和根节点

    Oracle 9i判断是叶子或根节点,是比较麻烦的一件事情,SQL演示脚本如下: DROP TABLE idb_hierarchical; create TABLE idb_hierarchical ...

  6. HDU 1890 - Robotic Sort - [splay][区间反转+删除根节点]

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1890 Time Limit: 6000/2000 MS (Java/Others) Memory Li ...

  7. 用JS实现点击TreeView根节点复选框全选

    以下两种方法哪个不报错就用哪个.用法都是在TreeView标签中加入OnClick="",然后引入函数名即可 第一种方法:(摘自:http://www.cnblogs.com/fr ...

  8. xml文件的根节点layout_width或者layout_height设置无效果的原因分析

    在android开发中相信大家对ListView.GridView等组建都非常熟悉,在使用它们的时候须要自己配置相关的Adapter,而且配置现骨干的xml文件作为ListView等组建的子View, ...

  9. 使用JLDAP操作LDAP,包含匿名连接、ldif导入导出、获取根节点、对数据的操作、LDAP错误码解析等

    bean类 package com.cn.ccc.ggg.ldap.model; import javax.persistence.Entity; import javax.persistence.T ...

随机推荐

  1. ADO.NET 连接方式和非链接方式访问数据库

    一.//连接方式访问数据库的主要步骤(利用DataReader对象实现数据库连接模式) 1.创建连接对象(连接字符串) SqlConnection con = new SqlConnection(Co ...

  2. 重构第16天 封装条件(Encapsulate Conditional)

    理解:本文中的“封装条件”是指条件关系比较复杂时,代码的可读性会比较差,所以这时我们应当根据条件表达式是否需要参数将条件表达式提取成可读性更好的属性或者方法,如果条件表达式不需要参数则可以提取成属性, ...

  3. 带复杂表头合并单元格的HtmlTable转换成DataTable并导出Excel

    步骤: 一.前台JS取HtmlTable数据,根据设定的分隔符把数据拼接起来 <!--导出Excel--> <script type="text/javascript&qu ...

  4. 微软modern.IE网站,多版本IE免费测试工具集

    微软今天发布了modern.IE,这是一系列免费的.针对Web 开发者的测试工具和资源集合网站,微软希望以此来帮助开发者更轻松地实现跨 IE 和其他现代浏览器.跨设备的兼容性,其他还有代码检测工具.标 ...

  5. ASP.NET MVC4 传递Model到View

    原文发表在:http://www.star110.com/Note/ReadArticle/60641215331146140043.html 开发环境:.NET MVC4 + EF6.0 模型: 1 ...

  6. 重新想象 Windows 8 Store Apps (70) - 其它: 文件压缩和解压缩, 与 Windows 商店相关的操作, app 与 web, 几个 Core 的应用, 页面的生命周期和程序的生命周期

    [源码下载] 重新想象 Windows 8 Store Apps (70) - 其它: 文件压缩和解压缩, 与 Windows 商店相关的操作, app 与 web, 几个 Core 的应用, 页面的 ...

  7. eclipse:File->New没有Android Application Project的解决办法

    我的Eclipse版本是:Kepler Service Release 1,截图: 解决步骤: 1.单击Window,选择Customize Perspective,如图: 2.勾选Android A ...

  8. uml入门之14图与图之间的关系

    1.先奉上整理的14图. 2.其次奉上整理的图之间的6种关系

  9. HTML 块元素

    分为3类 1. 结构块 只能包含块级元素.它们包含结构含义,但没有语义含义,也就是,不能说明内容是什么,只能说明其组织方式. <ol> <ul> <dl> < ...

  10. 在SqlServer中使用Try Catch(转)

    今天在写sql中出现了!我想在sql使用trycatch吧! 哎..但是语法又记不住了! 那就清楚我们的google大师吧! 嘿,网上关于在sql中使用Try Catch的还有真不少的文章! 闲话就少 ...