Java 按LastModefiedTime对文件数组排序
我想按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
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();
}