2016-10-20 4 views
0

オブジェクトempがtlに追加され、tlがpmに追加されるコンポジットパターンを実装します。私のリストにはpmオブジェクトだけが含まれていて、残りのオブジェクトは順番に格納されています。Javaのリストを使用して合成パターンを実装できますか?

しかし、これを繰り返して印刷しようとすると、pmの値だけが表示され、他の2つのオブジェクト値は表示されません。

これは1 pmオブジェクトの下に2つのtlオブジェクトが必要で、1つのtlの下に3つのempオブジェクトが必要です。

List<Entity> ls = new ArrayList<Entity>(); 
    Entity pm = new Entity(); 
    Entity tl = new Entity(); 
    Entity emp = new Entity(); 
    int i = 0, j = 0, k = 0; 
    for (i = 1; i <= 3; i++) { 
     emp = new Entity("Associate" + i, "Salem", 7563214, 3); 
     // ls.add(obj); 
     for (j = 1; j <= 2; j++) { 
      tl = new Entity("TL" + j, "Chennai", 4756921, 2); 
      tl.adds(emp); 
      // ls.add(obj); 

      for (k = 1; k <= 3; k++) { 
       pm = new Entity("PM"+ k, "Erode", 5693214, 1); 
       pm.adds(tl); 
       ls.add(pm);     
      } 
     } 
    } 

ここで、各コンストラクタの最後の値がレベルを定義します。レベルがクリックされたJSP内にボタンがあります。

<div id="company" style="display:none"> 

PM
TL
のEmp

このリストLSを別のリストは、に基づいてリストから値を取得するために使用された同じクラスの別のメソッドに渡されますレベル。

List<Entity> subset = new ArrayList<Entity>(); 
    for (Entity val : a) { 


      if (val.getLevel()>=level) { 
       subset.add(val); 
      } 

マイBeanクラスは、あなたが望むものを実装するためのエレガントな方法は、以下のように、toString()メソッドを実装することになります

パブリッククラスエンティティ{

private String name; 
private String dept; 
private int phNum; 
private int level; 
private List<Entity> entityList; 

public Entity(){} 

public Entity(String name,String dept, int phNum,int level) { 
    this.name = name; 
    this.dept = dept; 
    this.phNum = phNum; 
    this.level = level; 
    entityList = new ArrayList<Entity>(); 
} 
public void adds(Entity e) { 
    entityList.add(e); 
} 

public List<Entity> getEntityList(){ 
    return entityList; 
} 
+1

コードに問題はありますか? 3つのネストされたループを使用してデータ構造を作成しましたが、3つのネストされたループを使用してそれを印刷しますか? –

+0

いいえforeachループを使用しました。 for(エンティティval:a)ここで、エンティティは私のbeanクラスです。 – VijiBalaji

+0

for-eachを1つ使用する場合は、1つのレベル、つまり私が推測するトップレベルを反復処理します。 2つ以上のレベルを繰り返したい場合は、複数のループが必要です。または、より良い解決策である可能性が高い再帰を使用する必要があります。 –

答えて

1

です。 +で文字列を結合するのではなく、他のフィールドにもappend()を使いたいかもしれません。 ここで私は怠惰のためにコードをコピーしました。 <BR>またはその他の書式設定タグをStringBuilderに追加して、印刷データをうまく整形することができます。

public String toString(){ 
     StringBuilder stringRep = new StringBuilder().append(" Name : " + name + ", dept : " + dept + ", ph num :" + phNum+" "); 
     for(Entity subEntity:entityList){ 
      stringRep.append(subEntity.toString()); 
     } 
     return stringRep.toString(); 
} 
+0

これは私のJSPページでこれを印刷する方法を教えてくれますか? – VijiBalaji

+0

トップレベルエンティティのみを印刷していると言って、現在印刷していることをやり直してください。 EntityクラスのtoString()メソッドを編集した場合、同じコードがすべてのものを出力するはずです。 – Gautam

関連する問題