2

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

我可以得到一个Iterator[Int]Collection[Int]TreeMap,但我不知道如何将它们转换成Array[Int].

任何建议,将不胜感激。

4

3 回答 3

6

问题t.values.toArray在于它java.util.Collection已经有一个toArray()方法,这就是为什么它返回一个Integer[]看起来像Array[AnyRef]Scala 的方法。如果 Java 没有这样的方法,则隐式 inJavaConversionsIterable[Int]在构建数组之前将其转换为 an。因此,您可以显式调用覆盖或给出类型提示:

import collection.JavaConversions._    

(t.values: Iterable[Int]).toArray

或者

import collection.JavaConverters._

t.values.asScala.toArray

在我的机器上,对于 1000 个条目的 TreeMap,这些速度是 using的两倍多,大约是 30 倍。toMap

于 2012-04-16T01:18:05.470 回答
2

我从未使用过 Scala,但在 Java 中,您可以使用Collection.toArray()方法来获取 int[]。

希望有帮助。

问候。

于 2012-04-15T23:12:50.297 回答
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].

于 2012-04-15T23:12:30.290 回答