Java:返回一个LinkedHashSet

时间:2016-08-09 12:52:10

标签: list collections set linkedhashset

基本上,我正在尝试在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;
}

1 个答案:

答案 0 :(得分:0)

你想要一个有序且独特的集合 - LinkedHashSet是一个不错的选择。 关于你的方法的一些评论:

  • 您应该使用Generics f.e。:LinkedHashSet<File>LinkedHashSet<String>
  • 检查files.length是不必要的,但如果null不是path或发生I / O错误,您可以检查directory
  • 您应该正确命名变量: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;
   }
}