파이문

[Scala] 자바 컬렉션 스칼라에서 사용하기 본문

TIL

[Scala] 자바 컬렉션 스칼라에서 사용하기

민Z 2019. 5. 9. 15:13

자바 컬렉션 스칼라에서 사용하기


scala 2.11 에는 TreeMap 이 없어서 자바의 java.util.TreeMap 을 사용하려고 하였다. 그러나 java.util.TreeMap 에는 map멤버가 없었다. 자바의 컬렉션도 스칼라 처럼 사용하고 싶었고 그래서 찾아보니 아래의 패키지를 사용하면 되었다.

import scala.collection.JavaConversions._
import scala.collection.JavaConverters._

JavaConversions 를 쓰면 자동으로 컬렉션에서 scala 의 컬렉션 처럼 사용할 수 있게 되고 (예를 들면 map 이라든지 foreach 같은 멤버 함수들) JavaConverters를 쓰면 기존의 컬렉션 뒤에 asScala 를 붙여서 사용하면 된다.

scala> val k = new java.util.TreeMap[String, Integer]()
k: java.util.TreeMap[String,Integer] = {}

scala> import scala.collection.JavaConverters._
import scala.collection.JavaConverters._

scala> k.put("a", 1)
res0: Integer = null

scala> k.put("2", 1)
res1: Integer = null

scala> k.put("3", 2)
res3: Integer = null

scala> k.asScala.map {
     | x =>
     | println(x)
     | }
(2,1)
(3,2)
(a,1)
res4: scala.collection.mutable.Iterable[Unit] = ArrayBuffer((), (), ())

scala> import scala.collection.JavaConversions._
import scala.collection.JavaConversions._

scala> k.map {x=>println(x)}
<console>:19: warning: object JavaConversions in package collection is deprecated (since 2.12.0): use JavaConverters
       k.map {x=>println(x)}
       ^
(2,1)
(3,2)
(a,1)
res5: scala.collection.mutable.Iterable[Unit] = ArrayBuffer((), (), ())

2.12.X 부터는 JavaConversion 은 중단되었으므로 JavaConverters의 사용을 권장하고 있다.

 

ref

Comments