亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

當比較基于我自己的方法的結果時,我可以使用 Comparator.comparing()

當比較基于我自己的方法的結果時,我可以使用 Comparator.comparing()

萬千封印 2022-12-15 15:00:23
我想創建一個比較器,它基于由我構建的方法(需要一個文件)創建的字符串在文件之間進行比較?!癵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 通常能夠自動重寫您的代碼)


查看完整回答
反對 回復 2022-12-15
?
紫衣仙女

TA貢獻1839條經驗 獲得超15個贊

您提供的函數Comparator.comparing需要將您排序的類型映射到一個已經可排序的類型。在您的情況下,原始類型是File,可排序類型是String(您的結果getType()。您需要做的就是映射File -> String以獲取文件名,然后再次獲取類型。

IE

Comparator.comparing(f -> getType(f.getName());


查看完整回答
反對 回復 2022-12-15
  • 2 回答
  • 0 關注
  • 102 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號