如何在TreeMap中使用Scala的Ordering#reverse?

soc*_*soc 3 tree scala map

斯卡拉的Ordering特征有一种方法reverse似乎是"官方"的方式来获得一个TreeMap"错误"的方式.

特征的片段如下所示:

trait Ordering[T] extends Comparator[T] with PartialOrdering[T] with Serializable {
  outer =>

  override def reverse: Ordering[T] = new Ordering[T]{
    override def reverse = outer
    def compare(x: T, y: T) = outer.compare(y, x)
  }
  /*snip*/
}
Run Code Online (Sandbox Code Playgroud)

我认为它可以与Java相媲美Collections.reverseOrder,但Ordering.reverse当然不起作用.

如何使用TreeMap反向排序,例如:

new TreeMap[Foo, Bar](/*???*/)
Run Code Online (Sandbox Code Playgroud)

Dan*_*ral 8

new TreeMap[Foo, Bar]()(implicitly[Ordering[Foo]].reverse)
Run Code Online (Sandbox Code Playgroud)

当然,假设这Ordering[Foo]是隐含的(例如Ordering[Int]Ordering[String]).如果您将其定义为object X,则只需通过X.reverse.

请注意,此处的第一组括号必须为空 - 它只是在此特定情况下接收隐式参数的第二组括号.