我是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方法。