递归算法解析树形结构表

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;
 }

}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值