递归算法解析树形结构表

递归算法解析树形结构表
package com.xiong.dao;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

import com.xiong.hibernate.Tree;
/*
*操作查出来的树解构的List<Object>对象
*/
public class TreeUtil {
private static List<Tree> list=null;
private static List<Tree> lists=null;
private static StringBuffer sbf=null;


public List<Catagetorys> getFormatList(List<Tree> trees)
{
list=new ArrayList<Tree>();
sbf=new StringBuffer();
lists=trees;
List<Tree> ts=getAllChild(1,trees);
List<Catagetorys> clist=FormatList(ts," ");
return clist;
}
/**
* 返回改父类型的所有子结点
* @param parenetID
* @return 按照分类类出的List<Tree>列表
*/
public static List<Tree> getAllChild(int parenetID,List<Tree> items)
{
Tree tree=null;
Iterator<Tree> ites=items.iterator();
while(ites.hasNext())
{
tree=ites.next();
int pid=tree.getParentId();
if(pid==parenetID)
{

list.add(tree);
if(existChild(tree.getId())==true)
{
getAllChild(tree.getId(),lists);
}
}

}
return list;
}
/**
*
* 判断是否有子节点
* @param id 当前节点id
* @return boolean
*/
public static boolean existChild(int id)
{
Iterator ts=lists.iterator();
boolean ok=false;
Tree tree=null;
while(ts.hasNext())
{
tree=(Tree)ts.next();
if(tree.getParentId()==id)
{
ok=true;
break;
}
}
return ok;
}

/**
* 找某一节点的深度
* @param nodeId 父节点Id
* @return
*/
public static String getParent(int pId,String spstr)
{
Iterator ts=lists.iterator();
boolean ok=false;
Tree tree=null;
while(ts.hasNext())
{
tree=(Tree)ts.next();
if(tree.getId()==pId)
{
//System.out.print("id:"+tree.getId());
sbf.append(tree.getId());
if(tree.getParentId()!=0)
{
sbf.append(spstr);
getParent(tree.getParentId(),spstr);
}
}

}
return sbf.toString();

}
/**
* 根据指定的分隔符翻转字符串
*
*/

public static String RevString(String spstr1 ,String spStr)
{
String[] s=sbf.toString().split(spstr1);
sbf=new StringBuffer();
for(int i=s.length-1;i>=0;i--)
{
sbf.append(s[i]);
if(i!=0)
sbf.append(spStr);
}
return sbf.toString();
}

/**
* @param alist 传入要格式的列表
* @param format_str 格式连接的字符串
* @return 返回连接后结果
*/

public static List<Catagetorys> FormatList(List<Tree> alist,String format_str)
{
List<Catagetorys> clist=new ArrayList<Catagetorys>();
Iterator its=alist.iterator();
Catagetorys cts=null;
Tree tree=null;
while(its.hasNext())
{
cts=new Catagetorys();
tree=(Tree)its.next();
sbf=new StringBuffer();
String str=getParent(tree.getParentId(),"/");
System.out.println("id"+str);
String formt=getFormatString(tree.getName(),str.split("/").length,format_str);
cts.setTree(tree);
cts.setSpString(formt);
cts.setId(tree.getId().toString());
clist.add(cts);
}
return clist;
}

/**
* 根据传入的数组拼接相应长度的
*/
public static String getFormatString(String oldString,int format_legth,String format_str)
{
String fs="";
for(int i=1;i<format_legth;i++)
{
fs=fs+format_str;
}
return fs=fs+oldString;
}


public static List<Tree> getLists() {
return lists;
}
public static void setLists(List<Tree> lists) {
TreeUtil.lists = lists;
}
}

 

------------------------------------ Tree.java----------------------------

package com.xiong.hibernate;

/**
* Tree generated by MyEclipse Persistence Tools
*/

public class Tree implements java.io.Serializable {

// Fields

private Integer id;

private Integer parentId;

private Integer ischild;

private String name;

private String discription;

// Constructors

/** default constructor */
public Tree() {
}

/** full constructor */
public Tree(Integer parentId, Integer ischild, String name,
String discription) {
this.parentId = parentId;
this.ischild = ischild;
this.name = name;
this.discription = discription;
}

// Property accessors

public Integer getId() {
return this.id;
}

public void setId(Integer id) {
this.id = id;
}

public Integer getParentId() {
return this.parentId;
}

public void setParentId(Integer parentId) {
this.parentId = parentId;
}

public Integer getIschild() {
return this.ischild;
}

public void setIschild(Integer ischild) {
this.ischild = ischild;
}

public String getName() {
return this.name;
}

public void setName(String name) {
this.name = name;
}

public String getDiscription() {
return this.discription;
}

public void setDiscription(String discription) {
this.discription = discription;
}

}

转载于:https://www.cnblogs.com/tware-dsy/archive/2012/11/28/2792797.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值