0

基本上,我试图在 Java 中返回一个字符串集合。但...

  • 每个字符串必须是唯一的,因为它们都是当前文件夹中“.db”文件的名称,所以我认为这个集合应该是 LinkedHashSet。
  • 元素(文件名)必须保持完全相同的顺序,所以我可以通过它在集合中的顺序号选择其中一个。

我的主要例程将在 GUI 组件(可能是 JList)中显示此集合,供用户选择其中一个(不带 .db 扩展名)。我完全是新手(如您所见),所以如果您认为有比 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;
}
4

1 回答 1

0

您想要一个有序且唯一的集合 - LinkedHashSet 是一个不错的选择。对您的方法的一些评论:

  • 您应该使用泛型 fe:LinkedHashSet<File>LinkedHashSet<String>
  • 检查files.length是不必要的,但您可以检查null是否发生了pathis not adirectory或 I/O 错误
  • 你应该正确命名你的变量:a不是一个好名字
  • 您的方法可以是static-也许在静态助手类中?
  • Set.add方法returns truefalse是否添加了项目,您应该检查以防万一

放在一起:

//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;
   }
}
于 2016-08-09T13:17:34.007 回答