【问题标题】:how to convert List[java.util.Map] to List[Map]如何将 List[java.util.Map] 转换为 List[Map]
【发布时间】:2013-07-22 01:16:26
【问题描述】:

如何在scala中将List[java.util.Map]转换为List[Map]?

旧列表:

List[java.util.Map[String,String]]

通缉名单:

List[Map[String,String]]

我应该新建一个 List[Map] 并循环 oldList 吗?

谢谢!

【问题讨论】:

    标签: scala scala-collections scala-java-interop


    【解决方案1】:

    在 Scala 集合包中使用转换器方法。这是一个演示如何转换的示例:

    import scala.collection.JavaConverters._
    
    oldList: List[java.util.Map[String,String]]
    
    wantedList= oldList.asScala
    

    已编辑:

    正如弗拉基米尔·马特维耶夫所说的

    wantedList=oldList.map(_.asScala)
    

    【讨论】:

    • 整体方向(JavaConverters的用法)是正确的,但是你必须用asScala映射遍历列表,而不是仅仅调用列表上的这个方法:oldList.map(_.asScala)
    【解决方案2】:

    您可以使用scala.collection.JavaConversions 静态方法。这个添加了来自标准 Java 集合的隐式转换,并允许您执行这样的操作(假设我们已经打开了 REPL 并导入了 scala.collection.JavaConversions._):

    scala > x
    res1: java.util.HashMap[String,String] = {1=2}
    
    scala> x.toMap
    res2: scala.collection.immutable.Map[String,String] = Map(1 -> 2)
    

    您可以通过以下方式解决您的特定问题:

    res5: list: List[java.util.HashMap[String, String]] = ()
    scala > list.map(e => e.toMap)
    res6: List[scala.collection.immutable.Map[String,String]] = ()
    

    【讨论】:

      【解决方案3】:

      JavaConverters 自 Scala 2.9.0 起已弃用,并在 Scala 2.11-M1 中删除您不应使用它们。相反,有一个包scala.collection.convert 和一个模块WrapAsScala。它有一个隐式转换dictionaryAsScalaMap

      【讨论】:

      • JavaConverters 的一些成员已被弃用,但 JavaConverters 通常被弃用。
      • @sourcedelica JavaConverters 如您所见,所有成员均已弃用
      • 那些内部成员已被弃用,但它从 DecorateAsJavaDecorateAsScala 继承的所有内容都没有。 JavaConverters object 本身不是,import JavaConverters._ 仍然像以前一样工作。例如。你可以做jmap.asScala
      • @sourcedelica 这样做是为了在Scala 2.11-M1 中迁移和向后兼容,它们已被删除。
      猜你喜欢
      • 2017-07-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-02-23
      • 2021-02-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多