在流的排序方法中使用Comparator :: reverseOrder和Comparator.reverseOrder()有什么区别

Oro:

Comparator::reverseOrderComparator.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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章