2012-04-15 13 views
2

私はScalaにjava.util.Treemap[Long, Int]を持っています。私が必要とするのは、Treemapの値を配列[Int]に変換することです。ScalaのJava Collection [Int]をArray [Int]に変換する方法

は私がTreeMapからIterator[Int]またはCollection[Int]得ることができますいずれかが、私はArray[Int]にこれらを変換するかどうかはわかりません。

何か提案がありがとうございます。

答えて

6

問題はjava.util.Collectionはすでにそれがスカラ座へArray[AnyRef]のように見えるInteger[]を返す理由である、toArray()方法を持っているということです。 Javaにそのようなメソッドがない場合、JavaConversionsで暗黙的に暗黙のうちに配列を構築する前にIterable[Int]に変換します。これらは倍以上の約30倍の速さのために、toMapを使用するなど、

import collection.JavaConversions._  

(t.values: Iterable[Int]).toArray 

または代わりに私のマシン上で

import collection.JavaConverters._ 

t.values.asScala.toArray 

:だから、明示的coversionを呼び出すか、タイプのヒントを与えることができますいずれか1000エントリのTreeMap。

+1

もう一つのトリックは、タイプヒントを使用する代わりに、 'Iterable [Int]'への暗黙の変換を実行するために暗黙のClassManifest引数を明示的に指定することです: 't.values.toArray(manifest [Int])' –

1
import collection.JavaConversions._ 

val treemap = new java.util.TreeMap[Long, Int]() 
treemap.put(1,1) 
treemap.put(2,2) 

treemap.toMap.values.toArray // res0: Array[Int] = Array(1, 2) 

これは、ScalaのMapからTreeMapを変換した値を取得し、Arrayに変換します。 java.util.Collection[Int]からの暗黙的な変換は、あなたが.toArrayが戻っArray[Object]あなたを与える呼び出すときので

は残念ながらtreemap.values.toArrayは、トリックを行いません。

+0

これは、整数の配列ではなく、オブジェクトの配列を提供します。 – Ken

+0

@Ken、私はそれを修正しました。 – dhg

2

私はスカラでは一度も扱いませんでしたが、Javaでは、Collection.toArray()メソッドを使用してint []を取得しました。

希望すると助かります。

よろしくお願いいたします。 t.values.toArray

関連する問題