2011-02-03 14 views
3

を使用するためにスカラ座でのJavaのミキシング:私はそれが逆の順序でソートしたい場合は私は、次のような何かを行うことができますJavaでは可変のTreeMap

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); 
    } 
} 

と私はスカラ座の中から可変のJavaのTreeMapを作成したい場合は、私はそうすることができ

TreeMap<Double, MyObject> myMap = new TreeMap<Double, MyObject>()(new ReverseOrder()); 

としてオブジェクトをインスタンス化

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

JavaコンパレータをScalaで実装して、昇順または降順にソートできるようにするにはどうすればよいですか?ここでは、Scala Ordering特性とJavaコレクションを混在させることはできないと仮定しています。また、変更可能なTreeMapがScalaで利用可能になるかどうか、誰にもわかりますか?

+0

一般的なアドバイス:相談します最初にScala APIをJava実装に移す前に – Raphael

+0

@ラファエル。一般的に良いアドバイス。しかし、私はまだScala APIにまだ完全に圧倒されています。現時点では、Scala TreeMapの変更はありません。私の好みは純粋にScalaにとどまることですが、これは私が選択肢がないがJavaをいくつか含むケースの1つと考えられます。 –

+0

変更可能なSortedMapの欠如は、私も数週間前に襲ってきました。誰かが追加する必要があります。誰かがライブラリを持っていることは知っていますか?本当にうわー、 – ziggystar

答えて

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]) 
+0

ありがとうございます。それは、明示的にケースクラスにする必要があるようです。ReverseOrder [T:Ordering] extends java.util.Comparator [T] { –

+1

@Bruce:これは普通のクラスでも構いませんが、これを書く必要があります退屈な 'new'キーワードのように:' new ReverseOrder [Double] ':) – tenshi

+0

もう一度ありがとうございます。撮影ポイント。 –

3

をあなたが簡潔にこれを行うことができますので、ScalaのトレイトOrderingは、JavaインタフェースComparatorを拡張します

val treeMap = new java.util.TreeMap[Double, String](Ordering.Double.reverse) 
関連する問題