Convert java.util.HashMap to scala.collection.immutable.Map in java

后端 未结 6 874
北荒
北荒 2020-11-29 05:12

I\'m using some Scala library from my Java code. And I have a problem with collections. I need to pass scala.collection.immutable.Map as a parameter of a method

6条回答
  •  暖寄归人
    2020-11-29 05:51

    It's entirely possible to use JavaConverters in Java code—there are just a couple of additional hoops to jump through:

    import java.util.HashMap;
    import scala.Predef;
    import scala.Tuple2;
    import scala.collection.JavaConverters;
    import scala.collection.immutable.Map;
    
    public class ToScalaExample {
      public static  Map toScalaMap(HashMap m) {
        return JavaConverters.mapAsScalaMapConverter(m).asScala().toMap(
          Predef.>conforms()
        );
      }
    
      public static HashMap example() {
        HashMap m = new HashMap();
        m.put("a", "A");
        m.put("b", "B");
        m.put("c", "C");
        return m;
      }
    }
    

    We can show that this works from the Scala 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)
    

    But of course you could just as easily call these methods from Java code.

提交回复
热议问题