在Java中使用scala映射

K.K*_*K.K 4 java scala scala-collections

我有两个文件.一个是scala,另一个是java.

Scala文件有一个返回scala不可变映射的函数.

Java文件想要将该映射用作字典.

我是scala和java的新手.如何将该scala映射转换为java dicionary?

mae*_*tr0 7

这是将Scala immutable.Map转换为Java中的Java Map的更好方法.

java.util.Map<String, String> javaMap = scala.collection.JavaConverters
                                           .mapAsJavaMapConverter(scalaMap).asJava();
Run Code Online (Sandbox Code Playgroud)


som*_*ytt 6

HTH.从Scala方面很容易做到.

$ javap -cp ~/scala-2.13.0/lib/scala-library.jar scala.jdk.javaapi.CollectionConverters
Compiled from "CollectionConverters.scala"
public final class scala.jdk.javaapi.CollectionConverters {
  public static scala.collection.mutable.Map<java.lang.String, java.lang.String> asScala(java.util.Properties);
  public static <A, B> scala.collection.mutable.Map<A, B> asScala(java.util.Dictionary<A, B>);
  public static <A, B> scala.collection.concurrent.Map<A, B> asScala(java.util.concurrent.ConcurrentMap<A, B>);
  public static <A, B> scala.collection.mutable.Map<A, B> asScala(java.util.Map<A, B>);
  public static <A> scala.collection.mutable.Set<A> asScala(java.util.Set<A>);
  public static <A> scala.collection.mutable.Buffer<A> asScala(java.util.List<A>);
  public static <A> scala.collection.Iterable<A> asScala(java.util.Collection<A>);
  public static <A> scala.collection.Iterable<A> asScala(java.lang.Iterable<A>);
  public static <A> scala.collection.Iterator<A> asScala(java.util.Enumeration<A>);
  public static <A> scala.collection.Iterator<A> asScala(java.util.Iterator<A>);
  public static <K, V> java.util.concurrent.ConcurrentMap<K, V> asJava(scala.collection.concurrent.Map<K, V>);
  public static <K, V> java.util.Map<K, V> asJava(scala.collection.Map<K, V>);
  public static <K, V> java.util.Dictionary<K, V> asJavaDictionary(scala.collection.mutable.Map<K, V>);
  public static <K, V> java.util.Map<K, V> asJava(scala.collection.mutable.Map<K, V>);
  public static <A> java.util.Set<A> asJava(scala.collection.Set<A>);
  public static <A> java.util.Set<A> asJava(scala.collection.mutable.Set<A>);
  public static <A> java.util.List<A> asJava(scala.collection.Seq<A>);
  public static <A> java.util.List<A> asJava(scala.collection.mutable.Seq<A>);
  public static <A> java.util.List<A> asJava(scala.collection.mutable.Buffer<A>);
  public static <A> java.util.Collection<A> asJavaCollection(scala.collection.Iterable<A>);
  public static <A> java.lang.Iterable<A> asJava(scala.collection.Iterable<A>);
  public static <A> java.util.Enumeration<A> asJavaEnumeration(scala.collection.Iterator<A>);
  public static <A> java.util.Iterator<A> asJava(scala.collection.Iterator<A>);
}
Run Code Online (Sandbox Code Playgroud)

编辑:伙计,这很痛苦:

$ jshell --class-path .:~/scala-2.13.0/lib/scala-library.jar 
|  Welcome to JShell -- Version 11.0.3
|  For an introduction type: /help intro

jshell> Map<String, String> vs = scala.jdk.javaapi.CollectionConverters.asJava(new mytools.MapMaker().m())
vs ==> {greeting=hi, reply=bye}
Run Code Online (Sandbox Code Playgroud)