2017-05-04 3 views
0

レコード選択に基づいてテーブルの名前のリストが必要です。再帰繰り返し値を使用してJavaの文字列リストに入る

たとえば、Id = 1を選択した場合、子のすべての子でリスト値(A、b、c、d)が必要です。

以下は私のテーブルデータです。

ID(1,2,3,4,5)名(A、B、C、D、E)ParentIdは( - 、1,1,3、 - )

後は、再帰のために私のコードです

public List<String> selectData(int orgId) { 
    String parentId = String.valueOf(orgId);   

    List<Object> listData = selectAllData();// here parent select 
    List<String> returnList = new ArrayList<String>(); 
    for (Object parents : listData) { 


      List<String> list = this.getChildFor(parents.getId()); 

      for (String child : list) { 
       returnList.add(child); 
      } 

    } 
    for(String enty : listData){ 
     returnList.add(enty); 
    } 
    return returnList; 
} 

public List<String> getChildFor(int orgId) { 

    String parentId = String.valueOf(orgId); 
    int pId = 0; 
    List<Object> listData = selectByExample(); // here child select from all record based on orgId. 
    List<String> returnList = new ArrayList<String>(); 
    do { 
     for (Object parents : listData) { 
       returnList.add(parents.name); 
       List<String> list = this.getChildFor(parents.getId); 
       for (String child : list) { 
        returnList.add(child.getname()); 
       } 

     } 
     pId = 0; 
    } while (pId != 0); 
    for(String enty : listData){ 
     returnList.add(enty); 
    } 
    listData = null; 
    return returnList; 
} 

"returnList"リストに重複した値があります。 誰もがこの感謝について私に考えを与える。

+0

に追加されますので、

for(String enty : listData){ returnList.add(enty); } 

を削除するようにしてください? –

+0

Id 1を選択すると、(a、b、a、b、c、d)のような値が得られます。私は必要なid 1(a、b、c、d)のように子供のすべての子どもと一緒に価値が必要です。 – VJM

答えて

0

getChildForメソッドでは、listDataを2回繰り返します。

は、すでにあなたが重複する値を取得すべきではないと考えています何returnList.add(parents.name);

+0

うわ..それはうまく働いているStanislavL – VJM

関連する問題