How to use Scala Order # back using TreeMap?

Scala Orderingtrait has a method reversethat seems to be the “official” way to get TreeMap, which is sorted in the “wrong” way.

An excerpt of this trait is as follows:

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*/
}

I thought this would work like Java Collections.reverseOrder, but it Ordering.reversedoesn't work, of course.

How to use reverse order with TreeMap, e. g :.

new TreeMap[Foo, Bar](/*???*/)
+3
source share
3 answers
new TreeMap[Foo, Bar]()(implicitly[Ordering[Foo]].reverse)

Assuming it is Ordering[Foo]implicitly available (e.g., Ordering[Int]or Ordering[String]). If you defined it as object Xjust go X.reverse.

, - , .

+7
new TreeMap[Foo,Bar]()(Ordering[Foo].reverse)

. ! implicitly.

, :

  • Odering[Foo] Ordering.apply, ( Ordering)
  • def Ordering.ordered ( , ) Ordering
  • Ordering Ordering.apply
  • reverse Ordering Ordering

, .

+2

new TreeMap[Foo,Bar]()(Ordering.ordered[Foo].reverse) , Ordering[Foo] , Foo extends Ordered[Foo] (, Foo extends Comparable[Foo]).

+1

Source: https://habr.com/ru/post/1782121/


All Articles