Смешивание Java со Scala для использования изменяемого TreeMap

В Java я могу сделать что-то вроде следующего:

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

Если я хочу отсортировать их в обратном порядке, я могу предоставить компаратор, такой как

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);
    }
}

и создать экземпляр объекта как

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

Если я хочу создать изменяемый Java TreeMap из Scala, я могу сделать что-то вроде этого:

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

Как мне реализовать компаратор Java в Scala, чтобы я мог сортировать по возрастанию или убыванию? Здесь я предполагаю, что не могу смешать черту Scala Ordering с коллекцией Java. Кроме того, кто-нибудь знает, будет ли в Scala изменяемая переменная TreeMap?

2 ответа

Решение

Ты можешь использовать Orderingи определить ReverseOrder как это:

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]) 

Черта Скала Ordering расширяет интерфейс Java Comparatorтак что вы можете сделать это кратко:

val treeMap = new java.util.TreeMap[Double, String](Ordering.Double.reverse)
Другие вопросы по тегам