2012-04-15 136 views
2

我Scala中的一個java.util.Treemap[Long, Int]。我需要做的是將Treemap中的值轉換爲Array [Int]。如何Java集合[INT]轉換爲數組[INT]在斯卡拉

我可以得到從TreeMapIterator[Int]Collection[Int],但我不知道如何將這些轉換爲Array[Int]

任何建議,將不勝感激。

回答

6

的問題t.values.toArrayjava.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。

+1

另一個訣竅,不是使用類型提示,而是讓它執行向'Iterable [Int]'的隱式轉換,將顯式提供隱式ClassManifest參數:'t.values.toArray(manifest [Int])' – 2012-04-16 21:27:57

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到斯卡拉Map,得到的值,並將其轉換爲Array

不幸的是treemap.values.toArray並沒有這樣做,因爲當您撥打.toArray時隱含地從java.util.Collection[Int]轉換爲Array[Object]

+0

這給你對象的數組,而不是整數 – Ken 2012-04-15 23:17:10

+0

@Ken數組,我只是固定它。 – dhg 2012-04-15 23:17:48

2

我從來沒有使用Scala的工作,但在Java中,你coud使用Collection.toArray()方法來獲得一個int []。

希望它的幫助。

問候。