【发布时间】: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
如何在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
在 Scala 集合包中使用转换器方法。这是一个演示如何转换的示例:
import scala.collection.JavaConverters._
oldList: List[java.util.Map[String,String]]
wantedList= oldList.asScala
已编辑:
正如弗拉基米尔·马特维耶夫所说的
wantedList=oldList.map(_.asScala)
【讨论】:
JavaConverters的用法)是正确的,但是你必须用asScala映射遍历列表,而不是仅仅调用列表上的这个方法:oldList.map(_.asScala)
您可以使用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]] = ()
【讨论】:
JavaConverters 自 Scala 2.9.0 起已弃用,并在 Scala 2.11-M1 中删除您不应使用它们。相反,有一个包scala.collection.convert 和一个模块WrapAsScala。它有一个隐式转换dictionaryAsScalaMap
【讨论】:
JavaConverters 的一些成员已被弃用,但 JavaConverters 通常不被弃用。
DecorateAsJava 和 DecorateAsScala 继承的所有内容都没有。 JavaConverters object 本身不是,import JavaConverters._ 仍然像以前一样工作。例如。你可以做jmap.asScala。