2016-08-09 1 views
0

基本的には、Javaで文字列のコレクションを返そうとしています。 しかし...Java:LinkedHashSetを返す

  • 彼らは現在のフォルダ内の「.DB」ファイルのすべての名前だから、各文字列は一意でなければなりませんので、私は、このコレクションはLinkedHashSetのあるべきと思いました。
  • 要素(ファイル名)は正確に同じ順序を維持する必要があります。そのため、コレクションの順序番号でその1つを選択できます。

私のメインルーチンは、このコレクションをGUIコンポーネント(おそらくJList)に表示して、ユーザーが(拡張子なしで)その1つを選択できるようにします。 私はまったく初心者です(あなたが見るように)、LinkedHashSetよりも良いオプションがあると思うなら教えてください。

また、メインクラスでこのコレクションを取得するにはどうすればよいですか?私がこれまで持っているもの

public Set GetDBFilesList() { 

    //returns ORDERED collection of UNIQUE strings with db filenames 

    LinkedHashSet a = new LinkedHashSet(); 

    FilenameFilter dbFilter = (File file, String name) -> { 
     return name.toLowerCase().endsWith(".db"); 
    }; 

    String dirPath = ""; 
    File dir = new File(dirPath); 
    File[] files = dir.listFiles(dbFilter); 

    if (files.length > 0) { 
     for (File aFile : files) { 
      a.add(aFile.getName()); 
     } 
    } 

    return a; 
} 

答えて

0

あなたが注文し、ユニークなコレクションをしたい - LinkedHashSetのは良い選択です。あなたMethodeの上 いくつかのコメント:

  • あなたの使用する必要がありますジェネリックFE:LinkedHashSet<File>またはLinkedHashSet<String>
  • files.lengthためのチェックは不要ですが、pathがない場合は、nullをチェックすることができdirectoryまたはI/Oエラーはあなたが適切にあなたの変数に名前を付ける必要があります
  • を発生しました:a
  • 良い名前ではありませんあなたのMethodeのはstaticすることができます - 多分静的ヘルパークラスに?
  • Set.add Methodeのreturns trueまたはfalse項目が追加されたりされなかった場合は、念のために

はすべて一緒に入れていることを確認する必要があります:あなたの助けを

//Your Main class 
public class Main 
{ 
    public static void main(String[] args) 
    { 
     File dir = new File(""); 
     Collection<File> dbFiles = DbFileManager.getDatabaseFiles(dir); 
    } 
} 

//Your DB File Reader Logic 
public class DbFileManager 
{ 
    public static Collection<File> getDatabaseFiles(File directory) 
    { 
     Collection<File> dbFiles = new LinkedHashSet<>(); 
     //filter code etc. 
     boolean success = dbFiles.addAll(directory.listFiles(filter)); 
     //Check if everthing was added 
     return dbFiles; 
    } 
} 
+0

感謝を。 1つの質問:Fileオブジェクトのコレクションがある場合、JListなどのGUIコンポーネントに名前をStringとして解析するにはどうすればよいですか? –

+0

文字列を含むコレクションを使用することもできますし、ファイルオブジェクトを必要とする場合は、JListのコンストラクタに渡してください。これによりDefaultLitsModelが作成されます。項目はFile.ToString()の可視値を持ちます。これはパスまたはfileNameでなければなりません。異なる文字列、アイコン、スタイルなどを表示したい場合は、独自のListCellRendererを記述することができます。 – HectorLector