我想创建一个比较器,它基于由我构建的方法(需要一个文件)创建的字符串在文件之间进行比较。“getType”是我自己的函数(我不能对 File 以外的文件使用不同的类)。我试过这个:private static Comparator<File> typeComparator = (File file1, File file2)-> getType(file1.getName()).compareTo(getType(file2.getName()));但 IntelliJ 不接受,说应该用 Comparator.comparing 代替。我不明白该怎么做,因为据我了解,在 Comparator.comparing 中我只能使用文件的属性,而不能使用我自己的函数。 private static String getType(String fileName) { int i = fileName.lastIndexOf('.'); if (i > 0) { return fileName.substring(i+1); } return ""; }如果可能的话,我想使用 Comparator.comparing 或比我的更好的不同方式来实现比较。
2 回答
缥缈止盈
TA贡献2041条经验 获得超4个赞
你可以做:
Comparator.comparing((file) -> getType(file.getName()))
或者,您可以更改getType()接受文件的方法,这样您就可以编写
Comparator.comparing(this::getType)
(是的,如果您按 alt+enter 询问,IntelliJ 通常能够自动重写您的代码)
紫衣仙女
TA贡献1839条经验 获得超15个赞
您提供的函数Comparator.comparing需要将您排序的类型映射到一个已经可排序的类型。在您的情况下,原始类型是File,可排序类型是String(您的结果getType()。您需要做的就是映射File -> String以获取文件名,然后再次获取类型。
IE
Comparator.comparing(f -> getType(f.getName());
添加回答
举报
0/150
提交
取消
