Bry*_*yan 11 java comparable comparator java-8 functional-interface
StreamJava 8中的类定义了一个max需要Comparator参数的方法.这是方法签名:
Optional<T> max(Comparator<? super T> comparator)
Run Code Online (Sandbox Code Playgroud)
Comparator是一个compare具有此签名的抽象方法的功能接口.通知compare需要2个参数.
int compare(T o1, T o2)
Run Code Online (Sandbox Code Playgroud)
该Comparable接口具有compareTo带此签名的抽象方法.通知compareTo只需要1个参数.
int compareTo(T o)
Run Code Online (Sandbox Code Playgroud)
在Java 8中,以下代码完美地运行.但是,我期望编译错误,例如"Integer类没有定义compareTo(Integer,Integer)".
int max = Stream.of(0, 4, 1, 5).max(Integer::compareTo).get();
Run Code Online (Sandbox Code Playgroud)
有人可以帮助解释为什么即使他们的方法签名不兼容Comparable,Comparator也可以将实例传递给期望实例的方法?
nos*_*sid 12
这是关于方法引用的一个很好的功能.请注意,这Integer::compareTo是一个实例方法.你需要两个Integer对象来调用它.一个在左侧(目标对象),一个在右侧(第一个也是唯一的参数).
Integer::compareTo方法的方法引用也是如此,它需要两个Integer对象并返回一个int.Comparator<Integer>是函数的函数接口,它期望两个Integer对象并返回一个int.这就是它起作用的原因.
| 归档时间: |
|
| 查看次数: |
3567 次 |
| 最近记录: |