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

我想创建一个比较器,它基于由我构建的方法(需要一个文件)创建的字符串在文件之间进行比较。


“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 或比我的更好的不同方式来实现比较。


万千封印
浏览 147回答 2
2回答

缥缈止盈

你可以做:Comparator.comparing((file)&nbsp;->&nbsp;getType(file.getName()))或者,您可以更改getType()接受文件的方法,这样您就可以编写Comparator.comparing(this::getType)(是的,如果您按 alt+enter 询问,IntelliJ 通常能够自动重写您的代码)

紫衣仙女

您提供的函数Comparator.comparing需要将您排序的类型映射到一个已经可排序的类型。在您的情况下,原始类型是File,可排序类型是String(您的结果getType()。您需要做的就是映射File -> String以获取文件名,然后再次获取类型。IEComparator.comparing(f&nbsp;->&nbsp;getType(f.getName());
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java