将Scala Array [Object]转换为Map

时间:2019-03-04 12:54:15

标签: scala

我有一个包含对象(Array[Organisation])的数组。 Organisation对象包含一个long orgId和一个string orgName。

是否存在将其转换为Map[Long, String](orgId,orgName)的便捷方法

case class OrgRegistryConfig() {

  var organisations: Array[Organisation] = _

  def toMap() : Map[Long, String] = // How??
  // Output: Map( orgId as Long -> orgName as String )

}

object OrgRegistryConfig {
  case class Organisation() {
    var orgId: Long = _
    var orgName: String = _
  }
}

2 个答案:

答案 0 :(得分:4)

organisations.map { o => o.orgId -> o.orgName }.toMap

^^应该这样做。

在相关说明中,请勿使用var,除非您确定确切地知道必须使用的确切原因(不需要Scala的案例中有95%最好假装关键字不存在,直到您对语言有足够的了解以区分那些罕见的情况为止,而绝对则不区分大小写。

此外,不要在构造函数之外声明case类成员。并且不要创建没有参数的案例类。

case class OrgRegistryConfig(organizations: Array[Organization]) {
  def toMap = organizations.map { o => o.orgId -> o.orgName }.toMap
}

答案 1 :(得分:2)

这可能是最有效的解决方案:

def toMap: Map[Long, String] =
  organisations.map(o => o.orgId -> o.orgName)(collection.breakOut)

使用breakOut意味着Map将直接从Array创建。如果使用toMap,它将创建一个中间数组,然后将其转换为Map