使用Scala的Comparator

时间:2018-02-27 21:06:13

标签: scala function

使用Scala中的Comparator有什么问题?调用未编译:

java.util.Comparator.comparing(
      new java.util.function.Function[String, java.math.BigInteger] {
        override def apply(t: String) = new java.math.BigInteger(t)
})

https://ideone.com/OdHvBU

错误信息非常不清楚。

Main.scala:3: error: overloaded method value comparing with alternatives:
  [T, U <: Comparable[_ >: U]](x$1: java.util.function.Function[_ >: T, _ <: U])java.util.Comparator[T] <and>
  [T, U](x$1: java.util.function.Function[_ >: T, _ <: U], x$2: java.util.Comparator[_ >: U])java.util.Comparator[T]
 cannot be applied to (java.util.function.Function[String,java.math.BigInteger])
    java.util.Comparator.comparing(
                         ^

这有什么不对?

1 个答案:

答案 0 :(得分:2)

我必须同意你的看法:错误信息不是很清楚。

这在这里有效:

java.util.Comparator.comparing[String, java.math.BigInteger](
  new java.util.function.Function[String, java.math.BigInteger] {
    override def apply(t: String) = new java.math.BigInteger(t)
  }
)

发生的情况是:由于某种奇怪的原因,它无法推断出类型参数U是什么,因此它是Comparable。您必须明确写出您正在比较BigInteger s。我不确定为什么,但它似乎是通用java方法的常见问题(here是我最近才看到的另一个类似例子)。