私はjava.util.Treemap[Long, Int]
Scalaを持っています。私がする必要があるのは、Treemap の値を Array[Int] に変換することです。
からIterator[Int]
またはを取得できますが、これらを に変換する方法がわかりません。Collection[Int]
TreeMap
Array[Int]
任意の提案をいただければ幸いです。
の問題t.values.toArray
は、java.util.Collection
既にメソッドを持っていることです。これが、 Scalaに のように見える をtoArray()
返す理由です。Java にそのようなメソッドがなかった場合、暗黙的な inが作動し、Array を構築する前にそれを anに変換します。したがって、カバーションを明示的に呼び出すか、型のヒントを与えることができます。Integer[]
Array[AnyRef]
JavaConversions
Iterable[Int]
import collection.JavaConversions._
(t.values: Iterable[Int]).toArray
または代わりに
import collection.JavaConverters._
t.values.asScala.toArray
私のマシンでは、1000 エントリの TreeMap の場合、これらは を使用する場合の2 倍以上、約 30 倍高速です。toMap
私は Scala を使ったことはありませんが、Java ではCollection.toArray()
メソッドを使用して int[] を取得できます。
それが助けになることを願っています。
よろしく。
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)
これはTreeMap
を scalaMap
に変換し、値を取得して に変換しますArray
。
残念ながら、呼び出し時の暗黙的な変換により back が返さtreemap.values.toArray
れるため、このトリックは実行されません。java.util.Collection[Int]
.toArray
Array[Object]