2

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

からIterator[Int]またはを取得できますが、これらを に変換する方法がわかりません。Collection[Int]TreeMapArray[Int]

任意の提案をいただければ幸いです。

4

3 に答える 3

6

の問題t.values.toArrayは、java.util.Collection既にメソッドを持っていることです。これが、 Scalaに のように見える をtoArray()返す理由です。Java にそのようなメソッドがなかった場合、暗黙的な inが作動し、Array を構築する前にそれを anに変換します。したがって、カバーションを明示的に呼び出すか、型のヒントを与えることができます。Integer[]Array[AnyRef]JavaConversionsIterable[Int]

import collection.JavaConversions._    

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

または代わりに

import collection.JavaConverters._

t.values.asScala.toArray

私のマシンでは、1000 エントリの TreeMap の場合、これらは を使用する場合の2 倍以上、約 30 倍高速です。toMap

于 2012-04-16T01:18:05.470 に答える
2

私は Scala を使ったことはありませんが、Java ではCollection.toArray()メソッドを使用して int[] を取得できます。

それが助けになることを願っています。

よろしく。

于 2012-04-15T23:12:50.297 に答える
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)

これはTreeMapを scalaMapに変換し、値を取得して に変換しますArray

残念ながら、呼び出し時の暗黙的な変換により back が返さtreemap.values.toArrayれるため、このトリックは実行されません。java.util.Collection[Int].toArrayArray[Object]

于 2012-04-15T23:12:30.290 に答える