2017-05-04 49 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

已經添加了什麼讓你相信你不應該得到一個重複的值? –

+0

當我選擇Id 1時,我得到了類似於(a,b,a,b,c,d)的值。我需要價值與他們的所有孩子的孩子一樣,我需要(a,b,c,d)。 – VJM

回答

0

getChildFor方法中,您重複執行listData兩次。

嘗試刪除

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

,因爲它在returnList.add(parents.name);

+0

哇..這是工作很好,謝謝StanislavL – VJM