多级关联打印树形结构

package xyrj.tree.utils;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
* @description
* 
* @classname PrintTree 
* @author maoyun0903<maoyun19900818@foxmail.com>
* @date 2012-12-16 下午02:14:15 
* @version 1.0
*/
public class PrintTree {

/**
* @field    整个tree模块中所有的记录
*/
private static List<Map<String,String>> _totalList;

/**
* @field    生成的树形结构集合
*/
private static List<Map<String,String>> treeList;

/**
* @field    深度
*/
private static int _level = 0;

/**
* @field    树形前缀符
*/
private static String _prefix="|";

/**
* @field    树形修饰符
*/
private static String _fix="-";

/**
* 构造方法(传所有记录数组集合)
*
* @description 
* 
* @param totalList
*/
public PrintTree(List<Map<String,String>> totalList)
{
_totalList    =    totalList;
treeList =    new ArrayList<Map<String,String>>();
System.out.println("构造方法");
}



/** 
* 打印树形结构
* @description
* @title main
* @param @param args
* @return void
* @throws 
*/
public static void main(String[] args) {

List<Map<String,String>> listMap = new ArrayList<Map<String,String>>();
Map map01    =    new HashMap<String,String>();
map01.put("tree_id", "1");
map01.put("tree_name", "湖南省");
map01.put("parent_id", "-1");

Map map02    =    new HashMap<String,String>();
map02.put("tree_id", "2");
map02.put("tree_name", "湖北省");
map02.put("parent_id", "-1");

Map map03    =    new HashMap<String,String>();
map03.put("tree_id", "3");
map03.put("tree_name", "常德市");
map03.put("parent_id", "1");

Map map04    =    new HashMap<String,String>();
map04.put("tree_id", "4");
map04.put("tree_name", "长沙市");
map04.put("parent_id", "1");

Map map05    =    new HashMap<String,String>();
map05.put("tree_id", "5");
map05.put("tree_name", "荆州市");
map05.put("parent_id", "2");

listMap.add(map01);
listMap.add(map02);
listMap.add(map03);
listMap.add(map04);
listMap.add(map05);

PrintTree    printTree    =    new PrintTree(listMap);
String str    =    printTree.genTree();
System.out.println(str.toString());

}

/**
* 打印最后树形结构
* 
* @description
* 
* @title genTree
* @param @return
* @return String
* @throws
*/
public static String genTree()
{
String father_id    =    "-1";
//System.out.println("genTree"+_totalList.size());
_genDiGuiList(father_id , 0);
StringBuffer    printTree    =    new StringBuffer();
//System.out.println("treeList"+treeList.size());
for(int i=0 ; i < treeList.size() ; i++)
{
printTree.append("<option name=\""+treeList.get(i).get("tree_id")+"\">"+
treeList.get(i).get("tree_name")+
"</option>");
}
return printTree.toString();
}

/**
* 递归遍历整个List集合
* 
* @description
* 
* @title _genDiGuiList
* @param @return    经过处理后的Map集合数组
* @return String
* @throws
*/
private static List<Map<String,String>> _genDiGuiList(String father_name,int count)
{
if(null != _totalList && _totalList.size() > 0)
{
for(int i = 0 ; i < _totalList.size() ; i++ )
{
_level=count;
String str    =    "";
String allStr    =    "";
//System.out.println(_totalList.get(i).get("tree_name"));
if((_totalList.get(i).get("parent_id")).equals(father_name))
{
//System.out.println(_level);
if(_level>0)
{
for(int j=0;j<_level;j++)
{
str    += _fix ;
}
allStr    =    _prefix + str ;
}
_level++;
//把totalList[i]取出赋值tree_name
String field_id    =    _totalList.get(i).get("tree_id");
String field_name    =    _totalList.get(i).get("tree_name");
//System.out.println(field_id+"...."+field_name);
Map<String,String> map    =    new HashMap<String,String>();
map.put("tree_id", field_id);
map.put("tree_name", allStr+field_name);
treeList.add(map);
//System.out.println(field_id);
_genDiGuiList(field_id,_level);
}else
{
continue;
}
}
}
return treeList;
}
}
原文地址:https://www.cnblogs.com/xmaomao/p/2831832.html