如何Java集合[INT]转换为数组[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