【发布时间】:2020-04-19 11:50:13
【问题描述】:
我试图采用已排序的 File[] 数组(应用了特定的排序条件)
我尝试对与第一次排序具有相似排序结果的不同对象应用额外排序(例如 - 文件大小)。
我写了以下代码,但是没有用:
private static void sameValueHandler(File[] orderedFiles, BiPredicate<File,File> sortingCondition){
for(int i = 0; i < orderedFiles.length - 1; i++){
int j;
for (j = i + 1; j < orderedFiles.length ; j++){
if (!sortingCondition.test(orderedFiles[i],orderedFiles[j])){
if (j - i - 1> 1){
File[] sameFiles = new File[j - i - 1];
System.arraycopy(orderedFiles, i, sameFiles, 0,j - i - 1);
sameFiles = MainOrder.defaultOrd(sameFiles); // Calls a method that sorts (files by file.getAbsolutePath())
System.arraycopy(sameFiles, 0, orderedFiles, i,j - i - 1);
}else{
break;
}
}
}
i = j;
}
}
基本上,我要做的就是检查来自orderedFiles 的哪些文件与给定的BiPredicate 共享相同的sortingCondition,并使用MainOrder.defaultOrd() 对这些文件进行排序,按file.getAbsolutePath() 排序,所以结果应该是一个排序数组,最初使用给定的 BiPredicate 排序(假设 File[] orderedFiles 已经排序) - 然后使用 deafaultOrd 方法重新处理共享相同排序条件的文件,同时保留具有唯一排序条件的原始文件导致地点。
例如:
假设我在orderedFiles 中有以下文件:
-file2.txt
-file1.txt
-file5.txt
-file6.txt
并且file1和file2共享相同的fileSize,但是file2.getAbsolutePath().compareTo(file1.getAbsolutePath()) > 0
我想使用数组,使 file2 出现在 file1 之后:
-file1.txt
-file2.txt
-file5.txt
-file6.txt
希望我已经足够清楚了。谢谢!
编辑:
也尝试使用冒泡排序,但效果不佳:
private static void sameValueHandler(File[] orderedFiles, BiPredicate<File,File> sortingCondition){
//TODO fix.
int arrLength = orderedFiles.length;
for(int i = 0; i<arrLength-1; i++){
for(int j=0; j<arrLength-i-1;j++){
if(sortingCondition.test(orderedFiles[j],orderedFiles[j+1])){
if(orderedFiles[j].getAbsolutePath().compareTo(orderedFiles[j+1].getAbsolutePath()) > 0){
File temp = orderedFiles[j];
orderedFiles[j] = orderedFiles[j+1];
orderedFiles[j+1] = temp;
}
}
}
}
【问题讨论】: