Смешивание Java со Scala для использования изменяемого TreeMap - PullRequest
3 голосов
/ 03 февраля 2011

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

6 голосов
/ 03 февраля 2011

Вы можете использовать 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]) 
3 голосов
/ 19 февраля 2011

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

val treeMap = new java.util.TreeMap[Double, String](Ordering.Double.reverse)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...