Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/359.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 按大小对文件列表进行排序花费了太多时间_Java_Android_Sorting - Fatal编程技术网

Java 按大小对文件列表进行排序花费了太多时间

Java 按大小对文件列表进行排序花费了太多时间,java,android,sorting,Java,Android,Sorting,文件夹的排序列表工作正常,但这需要花费太多的时间,并使手机冻结,直到该方法完成。 这是我用来对文件列表排序的方法 public static void sortFromLargeToSmall(List<Folders> foldersList, SDCardListViewAdapter sdCardListViewAdapter) { List<File> files = new ArrayList<>(); for (Folders fo

文件夹的排序列表工作正常,但这需要花费太多的时间,并使手机冻结,直到该方法完成。 这是我用来对文件列表排序的方法

public static void sortFromLargeToSmall(List<Folders> foldersList, SDCardListViewAdapter sdCardListViewAdapter) {
    List<File> files = new ArrayList<>();
    for (Folders folder: foldersList)
        files.add(folder.getFile());
    Comparator<File> sizeFileComparator = SizeFileComparator.SIZE_SUMDIR_REVERSE;
    Collections.sort(files, sizeFileComparator);
    sdCardListViewAdapter.clear();
    for(File file: files)
        if(file.isDirectory())
            sdCardListViewAdapter.add(new Folders(R.drawable.ic_folders, file.getName(), file));
        else
            sdCardListViewAdapter.add(new Folders(R.drawable.ic_file, file.getName(), file));
}
public static void sortFromLargeToSmall(列表文件夹列表,SDCardListViewAdapter SDCardListViewAdapter){
列表文件=新的ArrayList();
用于(文件夹:foldersList)
添加(folder.getFile());
比较器sizeFileComparator=sizeFileComparator.SIZE\u SUMDIR\u REVERSE;
Collections.sort(文件、sizeFileComparator);
sdCardListViewAdapter.clear();
用于(文件:文件)
if(file.isDirectory())
添加(新文件夹(R.drawable.ic_Folders,file.getName(),file));
其他的
添加(新文件夹(R.drawable.ic_文件,file.getName(),file));
}
这是文件夹对象构造函数

public Folders(int imageView, String folderName, File file) {
    this.folderIcon = imageView;
    this.folderName = folderName;
    this.file = file;
    this.isSelected = false;
    foldersPath = new ArrayList<>();
    foldersName = new ArrayList<>();
}
公用文件夹(int-imageView、字符串folderName、文件){
this.folderIcon=imageView;
this.folderName=folderName;
this.file=文件;
this.isSelected=false;
foldersPath=newarraylist();
foldersName=newarraylist();
}

有没有一种方法可以使该方法非常快速,并且不会使手机冻结

使其非常快速的方法非常广泛,但是要防止UI线程被阻塞太久,可以在后台线程上运行此方法。使用IDE的性能分析工具,甚至使用
日志
语句,要确定您的时间在代码中的确切位置,请直接对foldersList排序。不要使用中间列表。此外,您没有发布比较器代码。您也不必创建新文件夹。向Folders类添加一个大小变量,将其用于comparator。