2012-04-15 125 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 []。

希望它的帮助。

问候。