为什么 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认证中的常见问题。
下面的 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认证中的常见问题。