java - java中以树形结构显示ArrayList数据

标签 java arraylist tree hierarchy hierarchical-data

我有一个包含以下值的 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/

相关文章:

java - 为什么允许从另一个构造函数调用一个构造函数?

java - 错误 : JAVA_HOME is set to an invalid directory

android - 如何将数组列表与移动联系人进行比较

java - 数组列表的麻烦

java - 在 Java 中查找与给定子树匹配的树中的所有子树

rust - 重新排列id_tree Rust中的同级节点

c++ - 如何使用 std::map 在 C++ 中构建树结构

java - 存储库 Spring-Data-Cassandra 的自定义实现

java - 以 ArrayList 为值的 ConcurrentHashMap

java - java中的普通指令和快速指令有什么区别(例如aload和fast_aload)