【问题标题】:How to use java Map<String, Object> where scala Map[String, Any] is requred?如何在需要 scala Map[String, Any] 的地方使用 java Map<String, Object>?
【发布时间】:2015-03-03 02:30:28
【问题描述】:

如何使用/转换 Map 到 scala Map[String, Any]?

Java 对象在 scala 中被识别为 AnyRef。

是否有任何可用的单行转换?我想避免迭代新创建的 scala Map 并复制参考。

提前致谢。

【问题讨论】:

    标签: java scala type-conversion


    【解决方案1】:

    可能是这样的:

      val jmap = new HashMap[String, Object]
      jmap.put("1", new Date)
    
      import scala.collection.JavaConverters._
    
      val smap = jmap.asScala.mapValues(_.asInstanceOf[Any]).toMap
      test(smap)
    
      def test(m: Map[String, Any]): Unit = {
        println(m)
      }
    

    还要注意java.lang.Object 相当于 Scala 中的 AnyRef,而不是 Any

    【讨论】:

      【解决方案2】:

      这应该可行:

      import scala.collection.JavaConversions._
      val javaMap = new HashMap[String,Object]
      val scalaMap: Map[String,Any] = javaMap.toMap
      

      或者,如果您不喜欢“隐含的魔力”,请执行以下操作:

      import scala.collection.JavaConverters._ // note, this is a different import
      val javaMap = new HashMap[String, Object]
      val scalaMap: Map[String, Any] = javaMap.asScala.toMap // this .asScala is what the other version does implicitly
      

      还要注意,最后需要toMap,因为javaMap.asScala 返回一个mutable.Map,而Map[String,Any] 声明默认为immutable.Map。 如果您改用scala.collection.Map,则不需要它:

      import scala.collection.Map
      import scala.collection.JavaConversions._
      val javaMap = HashMap[String, Object]
      val scalaMap: Map[String,Any] = javaMap // voila!
      

      或明确

      import scala.collection.Map
      import scala.collection.JavaConverters._
      val javaMap = HashMap[String, Object]
      val scalaMap: Map[String, Any] = javaMap.asScala
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-06-16
        • 1970-01-01
        • 2020-08-01
        • 2020-01-26
        • 1970-01-01
        • 2018-09-22
        • 1970-01-01
        相关资源
        最近更新 更多