Java.util.map을 scala Map으로 변환하기

2018. 3. 27. 10:09Programming/Scala

Scala를 쓸 때 항상 뻘짓을 하게 되는 부분이 형변환인 것 같다.

python을 쓸때는 그냥 다 통용되는 느낌이었는데, scala에서는 데이터 형이 생각보다 엄청 중요하다는 걸 쓰면서 깨닫게 된다.

특히나 java에서 통용되는 Object 객체를 scala Map 등으로 바꿔주는게 생각보다 정말 까다롭고 힘들었다.


나 역시 java library를 통해 java.util.Map[String, Object] 이 형태로 값을 리턴 받았는데, value에 해당하는 Object를 처리하기 너무 까다로워서 java 코드 자체를 java.util.Map[String, Map[String, String]]으로 다시 변경해서 리턴을 받았다.


지금부터는 자바 Map을 scala Map으로 형변환 하는 방법을 서술할 것이다.

입력은 java.util.Map[String, java.util.Map[String, String] 형태이고 변환하고자 하는 목표는 Map[String, Map[String, String]]이다.


아래와 같이 java map 변수를 선언하고 값을 넣어주자.



javaMap이란 java.util.Map 변수를 선언해 주고, 값을 넣어 주자. 결과적으로 javaMap 변수에는 11이라는 키와 {1=a, 2=b, 3=c}의 값이 들어있게 된다. 이제 이 값을 scala Map으로 변환을 해주자.



우선 scalaMap으로 변환하기 위해서는 scala.collection.JavaConversions._를 import 해주어야 한다.

(warning으로 deprecated 되었다고 JavaConverters를 사용하라고 나오지만 일단 여기서는 무시...)


그 후에 javaMap.mapValues(_.toMap)을 해주면 된다. 

해석을 하자면 javaMap의 value들을 가져와서 scala Map으로 바꿔주라는 이야기다.


결과로 나온 scalaMap을 찍어보면 scalaMap 형태로 바뀐 것을 확인할 수가 있다.


Map(11->Map(1->a, 2->b, 3->c))