Java 为什么';t排序(比较器::反向排序)工作?

Java 为什么';t排序(比较器::反向排序)工作?,java,java-8,java-stream,comparator,Java,Java 8,Java Stream,Comparator,下面的流表达式工作得非常好: Stream<String> s = Stream.of("yellow","blue", "white"); s.sorted(Comparator.reverseOrder()) .forEach(System.out::print);` //yellowwhiteblue 类型比较器没有定义反向顺序(String,String) 适用于这里 一个方法引用告诉Java“将此方法视为单个方法接口的实现”——也就是说,该方法引用应该具有签名int

下面的流表达式工作得非常好:

Stream<String> s = Stream.of("yellow","blue", "white");
 s.sorted(Comparator.reverseOrder())
  .forEach(System.out::print);` //yellowwhiteblue
类型比较器没有定义反向顺序(String,String) 适用于这里


一个方法引用告诉Java“将此方法视为单个方法接口的实现”——也就是说,该方法引用应该具有签名
intfoo(String,String)
,从而实现
比较器


Comparator.reverseOrder()
不会——它返回一个
Comparator
实例。由于
sorted
正在寻找一个
比较器,它可以获取方法调用的结果,但不能将该方法用作接口实现。

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

比较器只有静态方法反向排序没有参数,这就是编译错误的原因。

Stream s=Stream.of(“黄”、“蓝”、“白”);
Stream<String> s=Stream.of("yellow","blue", "white");
        s.sorted(String::compareTo)
                .forEach(System.out::println);
s、 已排序(字符串::compareTo) .forEach(System.out::println);
如果您仍然希望使用方法引用,那么上述方法将起作用。
这似乎是OCP Java 8认证中的一个常见问题。

为什么您认为
Comparator.reverseOrder()
Comparator::reverseOrder
是等价的?你认为,这是同一件事的不同语法吗?这有什么意义?
Stream<String> s=Stream.of("yellow","blue", "white");
        s.sorted(String::compareTo)
                .forEach(System.out::println);