3

在 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());

如果我想在 Scala 中创建可变的 Java TreeMap,我可以这样做:

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

如何在 Scala 中实现 Java 比较器,以便可以根据升序或降序进行排序?在这里,我假设我不能将 Scala Ordering 特征与 Java 集合混合。另外,有谁知道可变 TreeMap 是否/何时在 Scala 中可用?

4

2 回答 2

6

您可以使用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]) 
于 2011-02-03T20:44:27.157 回答
4

Scala traitOrdering扩展了 Java 接口Comparator,所以你可以简洁地做到这一点:

val treeMap = new java.util.TreeMap[Double, String](Ordering.Double.reverse)
于 2011-02-19T00:54:36.650 回答