Comparator::reverseOrder 和 Comparator.reverseOrder() 用于流的排序方法时有什么区别
What is the difference between Comparator::reverseOrder and Comparator.reverseOrder() when used in sorted method of stream
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 个参数和 returns 一个 int
指示哪个参数更大或它们是否相等。
在Comparator.reverseOrder()
的情况下,reverseOrder
是returns一个Comparator<T>
的方法。在这种情况下,您调用该方法,它 returns 一个 Comparator
可以用作 sorted
的参数。一切都很好。
在 Comparator::reverseOrder
的情况下,您没有调用 reverseOrder
。相反,您将 reverseOrder
作为函数传递给 sorted
。如上所述,sorted
将接受一个带有 2 个参数和 returns 一个 int
的函数,但是您给它 reverseOrder
,它不带任何参数并且 returns一个Comparator<T>
。看到这里不匹配了吗?
Expected: a function that takes 2 parameters and returns an int OR a Comparator<T>
object
What you gave it: a function that takes no parameters and returns a Comparator<T>
这会导致编译器错误。
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 个参数和 returns 一个 int
指示哪个参数更大或它们是否相等。
在Comparator.reverseOrder()
的情况下,reverseOrder
是returns一个Comparator<T>
的方法。在这种情况下,您调用该方法,它 returns 一个 Comparator
可以用作 sorted
的参数。一切都很好。
在 Comparator::reverseOrder
的情况下,您没有调用 reverseOrder
。相反,您将 reverseOrder
作为函数传递给 sorted
。如上所述,sorted
将接受一个带有 2 个参数和 returns 一个 int
的函数,但是您给它 reverseOrder
,它不带任何参数并且 returns一个Comparator<T>
。看到这里不匹配了吗?
Expected: a function that takes 2 parameters and returns an int OR a
Comparator<T>
objectWhat you gave it: a function that takes no parameters and returns a
Comparator<T>
这会导致编译器错误。