在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集合混合。另外,有人知道Scala中是否可以使用可变的TreeMap吗?
答案 0 :(得分: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])
答案 1 :(得分:3)
Scala trait Ordering
扩展了Java接口Comparator
,因此您可以简洁地执行此操作:
val treeMap = new java.util.TreeMap[Double, String](Ordering.Double.reverse)