3

Java では、次のようなことができます。

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

逆順にソートしたい場合は、次のような Comparator を提供できます。

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 トレイトOrderingは Java インターフェースを拡張するComparatorため、これを簡潔に行うことができます。

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