我想創建一個比較器,它基于由我構建的方法(需要一個文件)創建的字符串在文件之間進行比較?!癵etType”是我自己的函數(我不能對 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
提交
取消