[SCALA] 스칼라지도 자바지도로 변환
SCALA스칼라지도 자바지도로 변환
나는 자바지도를 가지고 : java.util.Map
내가 mapAsScalaMap을 사용했지만 결과는 내가 원하는 꽤 것이 아니다, 결과는 다음과 같습니다 맵 [SomeObject의, java.util.Collection이 [OtherObject]. 어떻게 또한 세트에 컬렉션을 변환 해결할 수 있습니까?
참고 : 실제로 내 원래의 문제는 Multimap과 [SomeObject의, OtherObject]에 구글의 ArrayListMultimap
해결법
-
==============================
1.편집 : 권장되는 방법이 사용 JavaConverters과 .asScala 방법에 지금이다 :
편집 : 권장되는 방법이 사용 JavaConverters과 .asScala 방법에 지금이다 :
import scala.collection.JavaConverters._ val myScalaMap = myJavaMap.asScala.mapValues(_.asScala.toSet)
깨끗하고 consise 머물면서이, 마법의 암시 적 변환하지만 .asScala에 대한 명시 적 호출을 사용하지 않는 장점이있다.
JavaConversions와 원래의 대답 :
당신은 암시 적으로 자바와 스칼라 사이의 변환 scala.collection.JavaConversions을 사용할 수 있습니다 :
import scala.collection.JavaConversions._ val myScalaMap = myJavaMap.mapValues(_.toSet)
호출 mapValues는 스칼라지도에 자바지도에서 암시 적 변환을 트리거, 다음으로 자바 컬렉션 toSet를 호출 암시 적으로 스칼라 컬렉션에 다음 세트로 변환합니다.
기본적으로는 변경 가능한 맵을 돌려, 당신은 추가 .toMap와 불변의 하나를 얻을 수 있습니다.
짧은 틱 예 :
scala> val a: java.util.Map[String, java.util.Collection[String]] = new java.util.HashMap[String, java.util.Collection[String]] a: java.util.Map[String,java.util.Collection[String]] = {} scala> val b = new java.util.ArrayList[String] b: java.util.ArrayList[String] = [] scala> b.add("hi") res5: Boolean = true scala> a.put("a", b) res6: java.util.Collection[String] = [] scala> import scala.collection.JavaConversions._ import scala.collection.JavaConversions._ scala> val c = a.mapValues(_.toSet) c: scala.collection.Map[String,scala.collection.immutable.Set[String]] = Map(a -> Set(hi)) scala> c.toMap res7: scala.collection.immutable.Map[String,scala.collection.immutable.Set[String]] = Map(a -> Set(hi))
-
==============================
2.불변의지도 myJavaMap.asScala.toMap
불변의지도 myJavaMap.asScala.toMap
변경 가능한지도 myJavaMap.asScala
-
==============================
3.당신은 자바에서이 작업을 수행해야하는 경우 :
당신은 자바에서이 작업을 수행해야하는 경우 :
List<Tuple2<A, B>> tuples = javaMap.entrySet().stream() .map(e -> Tuple2.apply(e.getKey(), e.getValue())) .collect(Collectors.toList()); scala.collection.Map scalaMap = scala.collection.Map$.MODULE$.apply(JavaConversions.asScalaBuffer(tuples).toSeq());
기준 자료 : https://stackoverflow.com/a/45373345/5209935
-
==============================
4.당신은 아래의 기능을 사용하여 스칼라지도에 Java 맵을 변환 할 수 있습니다 :
당신은 아래의 기능을 사용하여 스칼라지도에 Java 맵을 변환 할 수 있습니다 :
val scalaMap = javaMap.asScala;
이것을 사용하기 위해 당신은 가져 오기 scala.collection.JavaConverters._ 라이브러리를 가져와야합니다.
희망이 도움이됩니다.
from https://stackoverflow.com/questions/16918956/convert-java-map-to-scala-map by cc-by-sa and MIT license
'SCALA' 카테고리의 다른 글
[SCALA] 스칼라에서; 나는 응용 프로그램의 특성을 사용해야합니까? (0) | 2019.11.27 |
---|---|
[SCALA] 스칼라 - 가변 (VAR)에있어서의 파라미터를 참조 (0) | 2019.11.27 |
[SCALA] CSRF 폼에 대한 AJAX POST 요청에 토큰에 따라 어떻게 전달하는 방법? (0) | 2019.11.27 |
[SCALA] 스칼라에서 열거 순열에 코드 (0) | 2019.11.27 |
[SCALA] 주어진 제네릭 형식 스칼라에 의해 클래스의 동반자 오브젝트를 취득 (0) | 2019.11.27 |