我有一个包含以下值的 arrayList:
static ArrayList<DTONodeDetail> tree;
public static void main(String[] args) {
// TODO Auto-generated method stub
tree=new ArrayList<DTONodeDetail>();
//first argument->NodeId
//second->NodeName
// third -> ParentNodeId
tree.add(getDTO(1,"Root",0));
tree.add(getDTO(239,"Node-1",1));
tree.add(getDTO(242,"Node-2",239));
tree.add(getDTO(243,"Node-3",239));
tree.add(getDTO(244,"Node-4",242));
tree.add(getDTO(245,"Node-5",243));
displayTree(tree.get(0));
}
public static DTONodeDetail getDTO(int nodeId,String nodeName,int parentID)
{
DTONodeDetail dto=new DTONodeDetail();
dto.setNodeId(nodeId);
dto.setNodeDisplayName(nodeName);
dto.setParentID(parentID);
return dto;
}
现在我想使用简单的java代码以树结构显示以上数据,如下所示:
Root
-----Node-1
------------Node-2
------------------Node-4
------------Node-3
------------------Node-5
我尝试过以下操作,但无法获得想要的结果:
public static void displayTree(DTONodeDetail dto){
ArrayList<DTONodeDetail> childs = selectChild(dto.getNodeId());
System.out.println(dto.getNodeDisplayName());
for(DTONodeDetail obj:childs){
displayTree(obj);
}
}
public static ArrayList<DTOWorkSpaceNodeDetail> selectChild(int nodeID){
ArrayList<DTOWorkSpaceNodeDetail> list=new ArrayList<DTOWorkSpaceNodeDetail>();
for(int i=0;i<tree.size();i++)
{
if(tree.get(i).getParentID()==nodeID){
list.add(tree.get(i));
}
}
return list;
}
请提供一些指南或代码。
最佳答案
你应该这样做
static void displayTree(DTONodeDetail root ,int level){
System.out.print(prefix(level));
System.out.println(root.name);
ArrayList<DTONodeDetail> children = selectChild(dto.getNodeId());
for(DTONodeDetail child : children){
displayTree(child, level + 1);
}
}
前缀是构建足够的“----”的函数
static String prefix(int level){
StringBuilder s = new StringBuilder();
for(int i = 0; i < level; i++){
s.append("----");
}
return s.toString();
}
结果
displayTree(node1, 0);
Node-1
----Node-2
--------Node-4
----Node-3
--------Node-5
关于java - java中以树形结构显示ArrayList数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26034834/