将Java与Scala混合使用可变树TreeMap

问题描述 投票:3回答:2

在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?

scala sorting treemap mutable
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]) 

3
投票

Scala特性Ordering扩展了Java接口Comparator,因此您可以简洁地执行此操作:

val treeMap = new java.util.TreeMap[Double, String](Ordering.Double.reverse)
© www.soinside.com 2019 - 2024. All rights reserved.