2017-12-17 17 views
0

私はFolder and Parent.という名前のテーブルに2つの列があります。私のサービスではFolderService.getAllParents(s)というメソッドがあります。(s)は文字列です。しかし、親カラムにフォルダを置くこともできます。再帰式を使ってすべてのフォルダとそれぞれの親を取得しようとしています。 たとえば、Documents (parent)およびFilm (folder)でもFilm (parent)およびReviews(folder),Reviews(parent)およびname(folder)などです。私は検索された文字列に基づいてすべての親とフォルダを取得したい。ここで立ち往生イム再帰式です:Java再帰ですべての値が返されない

public ArrayList<String> getParents(String s){ 
    ArrayList<String> mn = new ArrayList<String>(); 
    for(FolderManager y:FolderService.getAllParents(s)){ 
     if(y.getParent().isEmpty()){ 
      mn.add(y.getFolder()); 
      return mn; 
      }else{ 

       return getParents(y.getFolder()); 
      } 
    } 
    return mn; 
} 

私はすべてのエラーを得ていないmは私が正しくあなたを理解している場合、私は、すべての

Documents (parent) - Film (folder) Film (parent) - Reviews(folder)

+2

Springとは何ですか?あなたが得ているエラーは何ですか? – SMA

+0

質問を編集しました。再度確認してください。 –

+0

forループでは、結果をmnに追加するのではなく、何かを返してループを続行します。たぶんreturn getParentsを使う代わりに、mn.addAll(getParents)を使うべきです –

答えて

1

まずまでごFolderServiceを取得mは。 getAllParents()は常に1つのオブジェクトを返します(1つの子は親を1つしか持てないためです)。 私はここで再帰が必要とは思わない。これは単純なループで行うことができます:

List<String> getParents(FolderManager fm) { 
    List<String> parents = new ArrayList<>(); 
    while (fm.getParent() != null) { 
     parents.add(fm.getParent().getFolder()); 
     fm = fm.getParent(); 
    } 
    return parents; 
} 
関連する問題