[SCALA] 자바 scala.collection.immutable.Map에 java.util.HashMap에 변환
SCALA자바 scala.collection.immutable.Map에 java.util.HashMap에 변환
내 자바 코드에서 일부 스칼라 라이브러리를 사용하고 있습니다. 그리고 컬렉션에 문제가 있습니다. 나는 방법의 매개 변수로 scala.collection.immutable.Map을 통과해야합니다. 나는 변환하거나 내 자바 코드에서 immutable.Map를 구축하지만 난 그것을하는 방법을 모른다 할 수 있습니다. 제안?
해결법
-
==============================
1.그것은 코드가 통해 뛰어 추가 농구 단지 부부 자바 JavaConverters을 사용하는 것이 완전히 가능합니다 :
그것은 코드가 통해 뛰어 추가 농구 단지 부부 자바 JavaConverters을 사용하는 것이 완전히 가능합니다 :
import java.util.HashMap; import scala.Predef; import scala.Tuple2; import scala.collection.JavaConverters; import scala.collection.immutable.Map; public class ToScalaExample { public static <A, B> Map<A, B> toScalaMap(HashMap<A, B> m) { return JavaConverters.mapAsScalaMapConverter(m).asScala().toMap( Predef.<Tuple2<A, B>>conforms() ); } public static HashMap<String, String> example() { HashMap<String, String> m = new HashMap<String, String>(); m.put("a", "A"); m.put("b", "B"); m.put("c", "C"); return m; } }
이 스칼라 REPL에서 작동하는지 우리가 보여줄 수 :
scala> val jm: java.util.HashMap[String, String] = ToScalaExample.example jm: java.util.HashMap[String,String] = {b=B, c=C, a=A} scala> val sm: Map[String, String] = ToScalaExample.toScalaMap(jm) sm: Map[String,String] = Map(b -> B, c -> C, a -> A)
그러나 물론 당신은 쉽게 Java 코드에서 이러한 메서드를 호출 할 수 있습니다.
-
==============================
2.이것은 자바 1.8 스칼라 2.12와 나를 위해 일한 :
이것은 자바 1.8 스칼라 2.12와 나를 위해 일한 :
public static <K, V> scala.collection.immutable.Map<K, V> toScalaImmutableMap(java.util.Map<K, V> jmap) { List<Tuple2<K, V>> tuples = jmap.entrySet() .stream() .map(e -> Tuple2.apply(e.getKey(), e.getValue())) .collect(Collectors.toList()); Seq<Tuple2<K, V>> scalaSeq = JavaConverters.asScalaBuffer(tuples).toSeq(); return (Map<K, V>) Map$.MODULE$.apply(scalaSeq); }
-
==============================
3.자바 1.7 스칼라 2.11에 대한 내 솔루션 :
자바 1.7 스칼라 2.11에 대한 내 솔루션 :
@SuppressWarnings("unchecked") private static <K, V> scala.collection.immutable.Map<K, V> toScalaImmutableMap(java.util.Map<K, V> javaMap) { final java.util.List<scala.Tuple2<K, V>> list = new java.util.ArrayList<>(javaMap.size()); for (final java.util.Map.Entry<K, V> entry : javaMap.entrySet()) { list.add(scala.Tuple2.apply(entry.getKey(), entry.getValue())); } final scala.collection.Seq<Tuple2<K, V>> seq = scala.collection.JavaConverters.asScalaBufferConverter(list).asScala().toSeq(); return (scala.collection.immutable.Map<K, V>) scala.collection.immutable.Map$.MODULE$.apply(seq); }
-
==============================
4.당신은 소요 추가 API 호출 /되고있는 java.util.Map가 JavaConverters를 사용하여 변환을 제공을 제공 할 수 있습니까?
당신은 소요 추가 API 호출 /되고있는 java.util.Map가 JavaConverters를 사용하여 변환을 제공을 제공 할 수 있습니까?
class Example { import scala.collection.JavaConverters._ def fromMap(m:Map[...]) = ... // generics etc. elided def fromJava(m:java.util.Map) = { fromMap(m.asScala.toMap) } }
당신은 변환을 추출하고 (나는 당신에게 스칼라 라이브러리 수있는 좋은 방법입니다 작업에주의 특히) 데코레이터를 제공 할 수도 있습니다. 참고 DHG의 코멘트를 다시. 불변성.
from https://stackoverflow.com/questions/11903167/convert-java-util-hashmap-to-scala-collection-immutable-map-in-java by cc-by-sa and MIT license
'SCALA' 카테고리의 다른 글
[SCALA] 어떻게 디스크에 CSV로 스파크 DataFrame을 저장? (0) | 2019.11.07 |
---|---|
[SCALA] 스칼라 람다 함수에서 _의 사용 (0) | 2019.11.07 |
[SCALA] 어떻게 SBT 명령 내부 설정을 변경하려면? (0) | 2019.11.06 |
[SCALA] 왜 싱글 톤 객체 지향 더 많은 개체입니까? (0) | 2019.11.06 |
[SCALA] 가변 인자와 스파크 UDF (0) | 2019.11.06 |