我在Scala中有一个java.util.Treemap[Long, Int]
。我需要做的是将Treemap中的值转换为Array [Int]。
我可以从Iterator[Int]
获得Collection[Int]
或TreeMap
,但我不确定如何将这些转换为Array[Int]
。
任何建议都将不胜感激。
答案 0 :(得分:6)
t.values.toArray
的问题是java.util.Collection
已经有toArray()
方法,这就是为什么它会向Scala返回Integer[]
看起来像Array[AnyRef]
的原因。如果Java没有这样的方法,那么隐式JavaConversions
会在构建数组之前将其转换为Iterable[Int]
。因此,您可以显式调用coversion或提供类型提示:
import collection.JavaConversions._
(t.values: Iterable[Int]).toArray
或者
import collection.JavaConverters._
t.values.asScala.toArray
在我的机器上,对于1000个条目的TreeMap,这些超过两次大约是使用toMap
的30倍。
答案 1 :(得分:2)
我从未使用过Scala,但在Java中,您可以使用Collection.toArray()
方法获取int []。
希望它有所帮助。
问候。
答案 2 :(得分: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
转换为scala Map
,获取值,并将其转换为Array
。
不幸的是,treemap.values.toArray
无法解决问题,因为当您致电java.util.Collection[Int]
时.toArray
的隐式转化会让您返回Array[Object]
。