为什么 sorted(Comparator::reverseOrder) 不起作用?

Why doesn't sorted(Comparator::reverseOrder) work?

下面的 Stream 表达式工作得很好:

Stream<String> s = Stream.of("yellow","blue", "white");
 s.sorted(Comparator.reverseOrder())
  .forEach(System.out::print);` //yellowwhiteblue

为什么具有方法引用的等价方法不能编译?

s.sorted(Comparator::reverseOrder).forEach(System.out::print);

The type Comparator does not define reverseOrder(String, String) that is applicable here

方法引用告诉 Java "treat this method as the implementation of a single-method interface"--也就是说,方法引用应该有签名 int foo(String,String) 从而实现 Comparator<String>.

Comparator.reverseOrder() 没有——它 returns 一个 Comparator 实例 。由于 sorted 正在寻找 for a Comparator,它可以获取方法调用的结果,但不能将该方法用作接口实现。

带有方法引用的代码行 s.sorted(Comparator::reverseOrder) 告诉 Java 有一个带有签名的静态方法一个简单的方法比较器,它意味着有两个参数。

classComparator只有静态方法reverseOrder没有参数,这就是编译错误的原因。

Stream<String> s=Stream.of("yellow","blue", "white");
        s.sorted(String::compareTo)
                .forEach(System.out::println);

如果您仍想使用方法引用,则上述方法可行。 这个好像是OCP Java 8认证中的常见问题。