为什么不排序(Comparator :: reverseOrder)有效?
以下Stream表达式完美无缺:
Stream s = Stream.of("yellow","blue", "white"); s.sorted(Comparator.reverseOrder()) .forEach(System.out::print);` //yellowwhiteblue
为什么没有与方法引用相同的编译?
s.sorted(Comparator::reverseOrder).forEach(System.out::print);
Comparator类型不定义此处适用的reverseOrder(String,String)
方法引用告诉Java“将此方法视为单方法接口的实现” – 也就是说,方法引用应该具有签名int foo(String,String)
,从而实现Comparator
。
Comparator.reverseOrder()
不 – 它返回一个Comparator
实例 。 由于sorted
正在寻找一个Comparator
,它可以获取方法调用的结果,但它不能使用该方法作为接口实现。
带有方法引用s.sorted(Comparator :: reverseOrder)的代码行告诉Java有一个带有普通方法比较器签名的静态方法,它意味着有两个参数。
Comparator类只有没有参数的静态方法reverseOrder ,这就是编译错误的原因。