2013-02-27 2 views
0

У меня есть класс А, как это:(структура данных) Java LinkedList объекты Дерево

class A { 
    Long id; 
    String name; 
    Long parentId; // refers to another A object's id 
} 

Теперь я получаю список из объектов, и я хочу, чтобы поместить их все в структуры данных, как " дерево папок "на ПК, а затем просмотреть это дерево в графическом интерфейсе с помощью JSP, но я не знаю, как это реализовать. Не могли бы вы помочь по этим двум проблемам:
1. Как построить «дерево папок» из заданного списка объектов? Есть ли доступная поддержка API?
2. Как мы можем просмотреть это дерево данных и просмотреть его на JSP в качестве дерева папок без использования рекурсии? (Я имею в виду, что является лучшим способом их отображения)
Большое вам спасибо.

+2

У вас есть два атрибута: 'Long id' и' Long parentId', чтобы связать каждый узел с родителем. Что вы пытались решить? Если у вас нет идеи, возьмите карандаш и бумагу и подумайте над чем-то (потому что это выглядит как домашнее задание). –

+0

Значит, вы имеете в виду объект 'A' содержит ссылки (ссылки) на другие объекты' A'? –

+0

@NishantShreshth: Да, он содержит свой родительский идентификатор, а не родительский объект –

ответ

0

На основе ваших комментариев, я предполагаю, что вы можете изменить свой A класс выглядеть следующим образом:

class A { 
    Long id; 
    String name; 
    Long parentId; // refers to another A object's id 
    List<A> childrenNodes = new ArrayList(); 
} 

Теперь, предполагая, что у вас есть List<A> lstData заполнены все данные, и вы хотите, чтобы преобразовать его в Дерево, вы можете использовать следующий код/​​алгоритм:

public List<A> convertIntoTree(List<A> lstData) { 
    for(A parentA : lstData) { 
     //setting the children nodes for parentA 
     for(A childA : lstData) { 
      if (childA.getParentId() == parentA.getId()) { 
       parentA.getChildrenNodes().add(childA); 
      } 
     } 
    } 
    //the main tree 
    List<A> lstParents = new ArrayList<A>(); 
    //filling the tree 
    for(A parentA : lstData) { 
     //change this for your check if parent function or another rule 
     if (parentA.getParentId() == 0) { 
      lstParents.add(parentA); 
     } 
    } 
    return lstParents; 
} 
Смежные вопросы