Преобразование списка классов pojo в дерево Jdom? - PullRequest
4 голосов
/ 25 января 2010

У меня есть вызов класса POJO LEVEL и его диаграмма классов:

    0,1
    ------------|
    |           |
    |           |
   \|/          |   
  level-<>-------

Другими словами это:

public class Level
{
 private int id;
 private int label;
 private Set<Level> labels;
 private Level parent;
 ...
 }

У меня есть метод, который извлекает из базы данных ВСЕ уровень в List<Level>.

Я хочу для представления jdom (используя org.jdom api) Дерево (например, дерево для ваших каталогов), подобное этому

LEVEl 1
+++LEVEL 2
++++++LEVEL 3
LEVEL 4
LEVEL 5

Я знаю, что алгоритм должен быть рекурсивным.

У тебя есть какое-нибудь решение? Любой инструмент для преобразования в класс Java в дерево JDOM?

1 Ответ

1 голос
/ 25 января 2010

Я не знаю ни одной библиотеки, которая бы делала именно то, что вы просите.


Ваш уровень класса правильный, но не единственный вариант. Вы также можете добавить свойство Set<Level> children. Вы можете оставить ссылку parent или нет (двунаправленные отношения или многие-к-одному).

Это может сделать вашу древовидную структуру более естественной ...


Например, если бы вы использовали ORM , такой как Hibernate, вы могли бы просто найти экземпляр первого уровня (в списке, который вы получаете из Hibernate), и у вас уже было бы ваше дерево, просто игнорируйте другие экземпляры.


В противном случае, алгоритмическое решение может быть:

  1. есть все ваши экземпляры в unprocessed списке
  2. найти все экземпляры необработанных, которые не имеют родителя; добавьте их в свое дерево, удалите их из необработанных.
  3. цикл на следующем:
    • найти все экземпляры необработанного, у которых есть родительский элемент в дереве (если у дерева нет эффективной реализации contains, вы можете использовать для этого временный набор).
    • добавьте их в свое дерево, удалите их из необработанных.
...