list.sort / Collections.sort如何接受我的自定义比较器? [java 8]

时间:2018-08-08 08:13:14

标签: java-8 method-reference

我是Java 8的新手,它学习了一些教程和文档。但是无法消除所有疑虑。 在使用列表或集合类的排序操作时,我们需要(或不需要)传递比较器以获得所需的排序。但是对于Java 8,即使我们传递的是不扩展比较器的任何自定义类,它也可以正常工作。下面是我的代码:

public void compareList(List<Integer> list) {
     CustomComparator comparator = new CustomComparator();
     list.sort(comparator::dummyCompare);
     Collections.sort(list, comparator::dummyCompare);
     list.forEach(System.out::print);
}

自定义比较器类:

class CustomComparator{
    public int dummyCompare(final Integer a, final Integer b) {
        return b.compareTo(a);
    }
}

现在我的疑问是,我看到的是list.sort / Collections.sort定义,如下所示:

public static <T> void sort(List<T> list, Comparator<? super T> c) {
        list.sort(c);
    }

接受比较器作为第二个输入,然后为什么没有错误,如果已经在某处询问该链接,请帮助或建议我。

谢谢!

问题What is use of Functional Interface in Java 8?与我问的问题不同。它正在与lambda和方法引用讨论功能接口及其用途。但是我的问题是类型检查和方法名称“ dummyCompare”如何被忽略。因为在列表或集合的排序功能实现中,我们使用的是Comparator的compare方法。

0 个答案:

没有答案