假设我有一个字符串流:
Stream<String> stream = Stream.of("c","a","b");
工作正常:
stream.sorted(Comparator.reverseOrder())
stream.sorted(Comparator::reverseOrder)
^
Bad return type in method reference: cannot convert Comparator<T> to int
public static <T extends Comparable<? super T>> Comparator<T> reverseOrder() {
return Collections.reverseOrder();
}
比较器是一种功能接口。这意味着我们可以使用方法引用或lambdas来实现它。Comparator接口实现一个方法,该方法接受两个字符串参数并返回一个int。但是,Comparator::ReverseOrder不这样做。它是对接受零参数并返回比较器的函数的引用。这与接口不兼容。这意味着我们必须使用方法,而不是方法引用。
但我不明白。
简单地说,您需要一个比较器
,而不是对返回比较器的方法的引用。方法引用将与任何与比较器
签名匹配的方法一起使用。
实际的替代方案
stream.sorted(Comparator.reverseOrder())
是
stream.sorted((o1, o2) -> Comparator.<String>reverseOrder().compare(o1, o2));
因为sorted
方法接受比较器<?super T>
实例,此处不能使用Comparator::ReverseOrder
,因为它是Supplier
的实例。
问题内容: 因此,我在这里看到了一个示例,该示例如何使用Comparator接口对ArrayList进行排序,因此我进行了尝试。使用Strings可以很好地工作,但是我要排序的一个变量是Integer,它将无法编译,并说“不能取消引用int”。 我该怎么做才能使它起作用,并允许我按score变量对ArrayList进行排序? 这是我的代码: 谢谢您的帮助! 问题答案: 您不能在上调用方法;没有可以
问题内容: 我正在使用Java JungI图形包和Netbeans7。我从Java中收到以下错误: 这是与错误相关的代码: MyVertex类是我为图形设计的类。以下是MyVertex的代码 如何将MyVertex类型转换为可比对象? 为什么这是必要的?(我没有立即看到原因) 问题答案: 如何将MyVertex类型转换为可比对象? 实现可比接口。 或者,您可以将传递给的构造函数。 为什么这是必要的
问题内容: 我有包含我的上下文的课程。但是,当我编译时,在这一行中出现了另一个类: 类: 错误: AndroidManifest.xml: 问题答案: 您需要在清单中指定以使用自定义应用程序。 这是完整的
我正在做一些任务工作,我遇到了一个问题。 我收到了这个示例代码: 然而,当我尝试这样做时,会发生以下情况: 有什么想法吗?
我会期望std::reference_wrapper在将non-const转换为const方面可以作为参考,例如: 下面的代码在MSVC和GCC中编译并运行良好,但在Clang上则不行。我只是不明白为什么,它是UB,还是实际上是关于Clang编译器的问题? 仅在Clang上,显示以下错误: https://wandbox.org/permlink/FSY4tCvE9B17hbVn
我有一个简单的循环,将元素从一个