Как преобразовать Java Collection [Int] в Array [Int] в Scala

У меня java.util.Treemap[Long, Int] на Scala. Что мне нужно сделать, так это преобразовать значения в Treemap в массив [Int].

Я могу получить Iterator[Int] или Collection[Int] от TreeMap, но я не уверен, как преобразовать их в Array[Int].

Мы ценим любые предложения.


person Ken    schedule 15.04.2012    source источник


Ответы (3)


Проблема с t.values.toArray в том, что java.util.Collection уже имеет toArray() метод, поэтому он возвращает Integer[], который выглядит как Array[AnyRef] в Scala. Если бы в Java не было такого метода, неявное в JavaConversions включилось бы и скрыло бы его до Iterable[Int] перед построением массива. Таким образом, вы можете либо явно вызвать coversion, либо дать подсказку типа:

import collection.JavaConversions._    

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

или альтернативно

import collection.JavaConverters._

t.values.asScala.toArray

На моей машине это более чем вдвое примерно в 30 раз быстрее, чем при использовании toMap для TreeMap из 1000 записей.

person Luigi Plinge    schedule 16.04.2012
comment
Другой прием, вместо использования подсказки типа, чтобы заставить его выполнить неявное преобразование в Iterable[Int], было бы явно указать неявный аргумент ClassManifest: t.values.toArray(manifest[Int]) - person Luigi Plinge; 17.04.2012

Я никогда не работал со Scala, но в Java можно использовать метод Collection.toArray(), чтобы получить int [].

Надеюсь, это поможет.

С Уважением.

person Community    schedule 15.04.2012

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].

person dhg    schedule 15.04.2012
comment
Это дает вам массив объектов, а не массив целых чисел. - person Ken; 16.04.2012