我有一个包含对象(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 = _
}
}
答案 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
。