2012-04-15 3 views
2

나는 Scala에서 java.util.Treemap[Long, Int]을가집니다. Treemap의 값을 Array [Int]로 변환하면됩니다.Scala에서 Java Collection [Int]를 Array [Int]로 변환하는 방법

나는 Iterator[Int] 또는 Collection[Int]TreeMap에서 얻을 수 있지만, 이것을 Array[Int]으로 변환하는 방법을 잘 모르겠습니다.

의견을 보내 주시면 감사하겠습니다.

답변

6

문제는 java.util.Collection 이미 스칼라에 Array[AnyRef]처럼 보이는 Integer[]를 반환 이유입니다하는 toArray() 방법을 가지고 있다는 것입니다. Java에 그러한 메소드가 없다면, 암시적인 JavaConversions은 Array를 빌드하기 전에 Iterable[Int]으로 변환합니다. 그래서 당신은 명시 적으로 coversion를 호출하거나 타입 힌트를 제공 할 수 있습니다 : A에 대한, 이러한 toMap을 사용하여 최대한 빨리 배 이상 약 30 배

import collection.JavaConversions._  

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

또는 내 컴퓨터에 다른 방법

import collection.JavaConverters._ 

t.values.asScala.toArray 

을 1000-entry TreeMap.

+1

또 다른 속임수는 타입 힌트를 사용하는 대신에'Iterable [Int]'에 대한 암시 적 변환을 수행하기 위해 명시 적으로 암시 적 ClassManifest 인자를 제공하는 것입니다 :'t.values.toArray (manifest [Int])' –

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) 

이, 스칼라 MapTreeMap 변환 값을 얻을 수 및 Array로 변환합니다. java.util.Collection[Int]에서 암시 적 변환이 .toArray 다시 Array[Object]을 제공 호출 할 때하기 때문에

불행하게도 treemap.values.toArray은 트릭을하지 않습니다.

+0

정수의 배열이 아닌 배열 배열을 제공합니다. – Ken

+0

@Ken, 방금 수정했습니다. – dhg

2

저는 스칼라에서 일한 적이 없지만 자바에서는 Collection.toArray() 메서드를 사용하여 int []를 얻었습니다.

희망 하시겠습니까?

감사합니다. t.values.toArray

관련 문제