4

私は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.jdomapiを使用)には、このようなツリー(ディレクトリのツリーのような)が必要です

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

アルゴリズムが再帰的でなければならないことはわかっています。

解決策はありますか?Javaクラスをjdomツリーに変換するツールはありますか?

4

1 に答える 1

1

あなたが求めていることを正確に行うライブラリを知りません。


クラスのレベルは正しいですが、唯一の選択肢ではありません。プロパティを追加するSet<Level> childrenこともできます。リンクを維持することも、しparentないこともできます (双方向の関係、または多対 1)。

これにより、ツリー構造がより自然になるかもしれません...


たとえば、 Hibernate のようなORM を使用している場合、最初のレベルのインスタンス (Hibernate から受け取ったリスト内) を見つけることができ、ツリーは既に存在するため、他のインスタンスは単に無視します。


それ以外の場合、アルゴリズムの解決策は次のようになります。

  1. すべてのインスタンスをunprocessedリストに入れる
  2. 親を持たない未処理のすべてのインスタンスを見つけます。それらをツリーに追加し、未処理から削除します。
  3. 次のループ:
    • ツリー内に親を持つ未処理のすべてのインスタンスを検索します (ツリーに の効率的な実装がない場合はcontains、一時的な Set を使用できます)。
    • それらをツリーに追加し、未処理から削除します。
于 2010-01-25T16:52:35.290 に答える