为了账号安全,请及时绑定邮箱和手机立即绑定

当比较基于我自己的方法的结果时,我可以使用 Comparator.comparing()

当比较基于我自己的方法的结果时,我可以使用 Comparator.comparing()

万千封印 2022-12-15 15:00:23
我想创建一个比较器,它基于由我构建的方法(需要一个文件)创建的字符串在文件之间进行比较。“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 通常能够自动重写您的代码)


查看完整回答
反对 回复 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 关注
  • 146 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号