我Scala中的一個java.util.Treemap[Long, Int]
。我需要做的是將Treemap中的值轉換爲Array [Int]。如何Java集合[INT]轉換爲數組[INT]在斯卡拉
我可以得到從TreeMap
的Iterator[Int]
或Collection[Int]
,但我不知道如何將這些轉換爲Array[Int]
。
任何建議,將不勝感激。
我Scala中的一個java.util.Treemap[Long, Int]
。我需要做的是將Treemap中的值轉換爲Array [Int]。如何Java集合[INT]轉換爲數組[INT]在斯卡拉
我可以得到從TreeMap
的Iterator[Int]
或Collection[Int]
,但我不知道如何將這些轉換爲Array[Int]
。
任何建議,將不勝感激。
的問題t.values.toArray
是java.util.Collection
已經有一個toArray()
方法,這就是爲什麼它返回一個Integer[]
這看起來像一個Array[AnyRef]
Scala的。如果Java沒有這樣的方法,那麼隱含在JavaConversions
中的內容會在構建數組之前引入並將其轉換爲Iterable[Int]
。所以,你可以顯式調用丁文或給一個類型提示:
import collection.JavaConversions._
(t.values: Iterable[Int]).toArray
或可替代
import collection.JavaConverters._
t.values.asScala.toArray
在我的機器,這些都是兩倍以上約30倍的速度使用toMap
,對於1000條目TreeMap。
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
到斯卡拉Map
,得到的值,並將其轉換爲Array
。
不幸的是treemap.values.toArray
並沒有這樣做,因爲當您撥打.toArray
時隱含地從java.util.Collection[Int]
轉換爲Array[Object]
。
我從來沒有使用Scala的工作,但在Java中,你coud使用Collection.toArray()
方法來獲得一個int []。
希望它的幫助。
問候。
另一個訣竅,不是使用類型提示,而是讓它執行向'Iterable [Int]'的隱式轉換,將顯式提供隱式ClassManifest參數:'t.values.toArray(manifest [Int])' – 2012-04-16 21:27:57