Comparator::reverseOrder
和Comparator.reverseOrder()
在流的排序方法中使用时和有什么区别?
Stream<String> streamText = Stream.of("over the river", "through the woods", "to grandmother's house we go");
这有效:
streamText.filter(n -> n.startsWith("t"))
.sorted(Comparator.reverseOrder())
.findFirst().ifPresent(System.out::println);
但这不能编译:
streamText.filter(n -> n.startsWith("t"))
.sorted(Comparator::reverseOrder)
.findFirst().ifPresent(System.out::println);
好问题!
sorted
需要一个Comparator<T>
,对吗?Comparator<T>
是功能界面。它表示一个函数,该函数接受2个参数并返回int
指示哪个参数更大或它们是否相等。
在的情况下Comparator.reverseOrder()
,reverseOrder
是返回的方法Comparator<T>
。在这种情况下,您调用方法,并返回Comparator
可用作的参数sorted
。万事皆安。
在这种情况下Comparator::reverseOrder
,您没有打电话reverseOrder
。而是将您reverseOrder
作为函数传递给sorted
。如上所述,sorted
将接受一个接受2个参数并返回的函数int
,但是您给了它reverseOrder
,不接受任何参数并返回的函数Comparator<T>
。在这里看到不匹配?
预期:接受2个参数并返回int或
Comparator<T>
object的函数您提供的是:一个不带参数并返回一个
Comparator<T>
这会导致编译器错误。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句