如何在Scala中将Java Collection [Int]转换为Array [Int]

时间:2012-04-15 23:09:00

标签: java scala treemap

我在Scala中有一个java.util.Treemap[Long, Int]。我需要做的是将Treemap中的值转换为Array [Int]。

我可以从Iterator[Int]获得Collection[Int]TreeMap,但我不确定如何将这些转换为Array[Int]

任何建议都将不胜感激。

3 个答案:

答案 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]