我需要compartor按以下方式对路径对象进行排序。
我试过这样的方法。
public int compare(Path a, Path b) {
File aFile = a.toFile();
File bFile = b.toFile();
if (aFile.isDirectory() && bFile.isFile()) {
return -1;
}
return a.compareTo(b);
}
它给出了正确的目录顺序和所有目录之后的文件,但这不是我需要的。我还试过按文件深度和文件类型(目录或文件)进行比较,但完全没有成功。
基本上有三种情况我们需要检查。
Path a
是否是一个目录和 Path b
是不。(所以。a < b
)Path b
是一个目录和 Path a
是不。(所以。b < a
)Path a
和 Path b
是同一种类型(都是目录或文件),我们通过它们的名字来比较。将其转化为代码。
@Override
public int compare(Path a, Path b) {
final File aFile = a.toFile();
final File bFile = b.toFile();
if (aFile.isDirectory() && !bFile.isDirectory()) {
return -1;
} else if (!aFile.isDirectory() && bFile.isDirectory()) {
return 1;
} else {
return a.toString().compareToIgnoreCase(b.toString());
}
}
注意,为了不区分大小写的比较,我们要将... Path
到 String
并使用 String#compareToIgnoreCase
[1].
--