当前位置: 首页 > 知识库问答 >
问题:

Streams:使用方法引用时“无法将比较器转换为int”

古起运
2023-03-14

假设我有一个字符串流:

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不这样做。它是对接受零参数并返回比较器的函数的引用。这与接口不兼容。这意味着我们必须使用方法,而不是方法引用。

但我不明白。

共有1个答案

吉嘉珍
2023-03-14

简单地说,您需要一个比较器,而不是对返回比较器的方法的引用。方法引用将与任何与比较器签名匹配的方法一起使用。

实际的替代方案

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

  • 我有一个简单的循环,将元素从一个