Question

In Java I can do something like the following:

TreeMap<Double, String> myMap = new TreeMap<Double, String>();

If I want it sorted in reverse order, I can provide a Comparator such as:

class ReverseOrder implements Comparator<Object> {

    public ReverseOrder() {

    }

    public int compare(Object o1,Object o2) {
        Double i1=(Double)o1;
        Double i2=(Double)o2;
        return -i1.compareTo(i2);
    }
}

And instantiate the object as

TreeMap<Double, MyObject> myMap = new TreeMap<Double, MyObject>()(new ReverseOrder());

If I want to create the mutable Java TreeMap from within Scala, I can do something like this:

var treeMap = new java.util.TreeMap[Double,MyObject]

How do I implement the Java comparator in Scala so that I can sort based on ascending or descending order? Here, I'm assuming that I can't mix the Scala Ordering trait with the Java collection. Also, does anyone know if/when a mutable TreeMap is going to be available in Scala?

Was it helpful?

Solution

You can use Ordering, and define ReverseOrder like this:

case class ReverseOrder[T: Ordering] extends Comparator[T] {
  def compare(o1: T, o2: T) = -implicitly[Ordering[T]].compare(o1, o2)
}

val treeMap = new TreeMap[Double, String](ReverseOrder[Double]) 

OTHER TIPS

The Scala trait Ordering extends the Java interface Comparator, so you can do this concisely:

val treeMap = new java.util.TreeMap[Double, String](Ordering.Double.reverse)
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top