Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/224.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 按LastModefiedTime对文件数组排序_Java_Android_Algorithm_Sorting - Fatal编程技术网

Java 按LastModefiedTime对文件数组排序

Java 按LastModefiedTime对文件数组排序,java,android,algorithm,sorting,Java,Android,Algorithm,Sorting,我想按lastModefiedTime从最早到最新对文件数组进行排序(第一个元素必须是最早的,最后一个元素必须是最新的) 我写了这个方法,但是没有用 private static void swap(File[] files,int a, int b){ File h = files[a]; files[a]=files[b]; files[b]=h; } public static void fillBoxList(String path){ File

我想按lastModefiedTime从最早到最新对文件数组进行排序(第一个元素必须是最早的,最后一个元素必须是最新的)

我写了这个方法,但是没有用

private static void swap(File[] files,int a, int b){
    File h = files[a];
    files[a]=files[b];
    files[b]=h;
}

public static void fillBoxList(String path){



    File dir = new File(path);
    File[] files = dir.listFiles();

    if (files != null) {

        //Box.addToFilesArray(directoryListing[0]);
// print the List before Sorting 
        for(int i =0;i<dfiles.length;i++){
            Log.i("LastModDate", new Date(directoryListing[i].lastModified())+"");
        }
//Beginn of Sorting
        for (int i =1;i<files.length;i++) {

            Date lastModdate1 = new Date(files[i-1].lastModified());
            Date lastModDate2 = new Date(files[i].lastModified());

                 if(lastModdate1.compareTo(lastModDate2)>1){
                     swap(files,i-1,i);
                 }
        }
// print the List after Sorting
        for(int i =0;i<directoryListing.length;i++){
            Log.i("SortedLastModDate", new Date(directoryListing[i].lastModified())+"");
        }
    } else {

        Log.e("DircError","directory dont exists");
    }
}
私有静态无效交换(文件[]文件,int a,int b){
文件h=文件[a];
文件[a]=文件[b];
文件[b]=h;
}
公共静态void fillBoxList(字符串路径){
文件目录=新文件(路径);
File[]files=dir.listFiles();
如果(文件!=null){
//addToFilesArray(目录列表[0]);
//排序前打印列表

对于(int i=0;i我建议您首先检查比较语句返回的值

int comparison = date.compareTo(date2);
int comparison2=date2.comparieto(日期); int comparison3=日期。comparieto(日期)


记录这些int变量,然后检查如何排序,或者可能是您的日期格式不正确

您的排序算法实际上是错误的。一个表中应该有两个循环

while(true){
布尔交换=假;
对于(int i=1;i1){
交换(文件,i-1,i);
交换=真;
}
}
如果(!已交换)
打破
}

您可以使用以下Java 8方法:

public static void main(String[] args) throws IOException {
    Stream<File> sortedFiles = getSortedFiles("src/main/resources");
    sortedFiles.forEach(f ->
        System.out.printf("File: %s, last modified %s \n", f.getName(), new Date(f.lastModified()))
    );
}

public static Stream<File> getSortedFiles(String path) throws IOException {
    List<File> files = new ArrayList<>();
    try (Stream<Path> list = Files.list(Paths.get(path))) {
        list.map(Path::toFile)
                .sorted(Comparator.comparing(File::lastModified))
                .forEach(files::add);
    }
    return files.stream();
}
publicstaticvoidmain(字符串[]args)引发IOException{
Stream-sortedFiles=getSortedFiles(“src/main/resources”);
分拣文件。forEach(f->
System.out.printf(“文件:%s,上次修改的%s\n”,f.getName(),新日期(f.lastModified())
);
}
公共静态流GetSortedFile(字符串路径)引发IOException{
列表文件=新的ArrayList();
try(Stream list=Files.list(path.get(path))){
list.map(路径::toFile)
.sorted(Comparator.comparing(文件::lastModified))
.forEach(文件::添加);
}
返回files.stream();
}

您可以编写一个
java.util.Comparator
来比较
LastModefiedTime
,然后使用
java.utils.Arrays.sort(T[]a,Comparator如何将数组转换为
列表
,然后使用Java 8 Lambda对列表进行一行排序?我真的不知道Lambda,我从来没有使用过它!我尝试过你的解决方案。当我使用lastModdate1.compareTo(lastModDate2)>1时,我得到了最新的元素作为第一个元素。因此我将其更改为lastModdate1.compareTo(lastModDate2)
lastModdate1.compareTo(lastModDate2)以及在这种情况下我应该做什么?使用以下命令:
lastModdate1.compareTo(lastModDate2)将列表从最旧到最新排序的正确方法是lastModdate1.compareTo(lastModDate2)>0。我的错误是我将其与1进行比较!!谢谢我的朋友,你救了我一天!我们的项目使用java 7
public static void main(String[] args) throws IOException {
    Stream<File> sortedFiles = getSortedFiles("src/main/resources");
    sortedFiles.forEach(f ->
        System.out.printf("File: %s, last modified %s \n", f.getName(), new Date(f.lastModified()))
    );
}

public static Stream<File> getSortedFiles(String path) throws IOException {
    List<File> files = new ArrayList<>();
    try (Stream<Path> list = Files.list(Paths.get(path))) {
        list.map(Path::toFile)
                .sorted(Comparator.comparing(File::lastModified))
                .forEach(files::add);
    }
    return files.stream();
}