我有一个代码可以将目录中的所有文件都放到列表中。现在我想按照从最小到最大的大小对此列表进行排序。
是否有一个函数或其他东西比编写自己的代码更有效?如果什么也不存在,那么你可以指出我有效的代码吗?
我的代码是:
private List<File> getListFiles(File parentDir) {
ArrayList<File> inFiles = new ArrayList<>();
File[] files = parentDir.listFiles();
for (File file : files) {
if (!file.getName().endsWith(".nomedia")) {
inFiles.add(file);
}
}
//Here I should write my sorting code
return inFiles;
}
答案 0 :(得分:1)
您可以使用commons io
中的SizeFileComparator使用它非常简单,并提供许多其他有用的类和方法。
答案 1 :(得分:1)
我认为这样做的一种方法是创建一个文件的Hashmap及其各自的大小和另一个只有文件大小的Arraylist。
Hashmap myHashmap = new Hashmap<long, File>;
将每个文件插入到哈希映射中,如:
for (File file : inFiles) {
myHashmap.put(file.length(), file);
myFilesizeArrayList.add(file.length());
}
然后,您可以使用ArrayList的sort方法对文件大小进行排序:
myFilesizeArrayList.sort();
然后使用hashmap将已排序的filesize ArrayList转换回排序文件ArrayList:
inFiles.clear();
for (long size : myFilesizeArrayList) {
inFiles.add(myHashmap.get(size));
}
那应该按尺寸给你一个按文件排序的列表。
所有这一切,我不知道这是否比编写自己的简单排序算法更有效。我倾向于只写自己的,因为这将是一项相对简单的任务。
答案 2 :(得分:0)
此代码有效。 在将文件数组加载到List之前,我使用Array.sort对文件数组进行排序。
不得不在比较器上寻找一些例子,因为我从未使用过它。
private ArrayList<File> getListFiles(File parentDir) {
ArrayList<File> inFiles = new ArrayList<>();
File[] files = parentDir.listFiles();
//Added Arrays.sort
Arrays.sort(files, new Comparator<File>(){
public int compare(File f1, File f2)
{
return Long.valueOf(f1.length()).compareTo(f2.length());
} });
for (File file : files) {
if (!file.getName().endsWith(".nomedia")) {
inFiles.add(file);
}
}
return inFiles;
}
答案 3 :(得分:0)
您也可以将Comparator
传递给SortedSet
。