简体   繁体   English

如何通过java代码将java HashMap转换为不可变的Scala映射?

[英]How to convert a java HashMap to immutable Scala map via java code?

I need to create a scala.collection.immutable.Map but I can't use Scala code, I have to use Java. 我需要创建一个scala.collection.immutable.Map但我不能使用Scala代码,我必须使用Java。 How is it done? 怎么做?

I'm not looking for an empty map, I want to convert an existing Java map to an immutable Scala map. 我不是在寻找一张空地图,我想将现有的Java地图转换为不可变的Scala地图。

You can use JavaConverters to do this 您可以使用JavaConverters执行此操作

import java.util.HashMap;
import scala.Predef;
import scala.Tuple2;
import scala.collection.JavaConverters;
import scala.collection.immutable.Map;

public class ToScalaTest {
  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> test() {
    HashMap<String, String> m = new HashMap<String, String>();
    m.put("a", "Stackoverflow");
    return m;
  }
}

We can show that this works in the Scala REPL 我们可以证明这在Scala REPL中有效

scala> val jm: java.util.HashMap[String, String] = ToScalaTest.test
jm: java.util.HashMap[String,String] = {a=Stackoverflow}

scala> val sm: Map[String, String] = ToScalaTest.toScalaMap(jm)
sm: Map[String,String] = Map(a -> Stackoverflow)

You can of course just call this methods easily from java code 您当然可以从java代码轻松调用此方法

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM