我有一个带有对象的数组(数组[组织]
)。组织
对象包含一个长
orgId 和一个字符串
orgName。
有没有一种简便的方法可以将它转换成< code>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 = _
}
}
这可能是最有效的解决方案:
def toMap: Map[Long, String] =
organisations.map(o => o.orgId -> o.orgName)(collection.breakOut)
使用突破
意味着Map
将直接从Array
创建。如果您使用toMap
,它将创建一个中间数组,然后将其转换为Map
。
organisations.map { o =
^^这应该可以做到。
与此相关的是,不要使用
var
,除非你确定你必须使用它的确切原因(scala中95%的情况下你不需要它,最好假装关键字不存在,直到你对语言有足够的掌握来区分那些罕见的情况),而且绝对不要在案例类中使用。
另外,不要在构造函数之外声明case类成员。并且不要创建没有参数的case类。
case class OrgRegistryConfig(organizations: Array[Organization]) {
def toMap = organizations.map { o => o.orgId -> o.orgName }.toMap
}
参考[Stackoverflow]Scala:将map转换为case类我尝试复制其中一个响应,我看到以下错误: <代码>无法构造com的实例。实践斯卡拉。Test“(不存在任何创建者,如默认构造):无法从[源:未知;行:-1,列:-1]处的对象值(无委托或基于属性的创建者)反序列化 代码: 这个错误说明了什么?我错过了什么吗?
问题内容: 转换的最佳方法是什么: 至: 问题答案: ECMAScript 6引入了易于填充的内容: 该方法用于将所有可枚举的自身属性的值从一个或多个源对象复制到目标对象。它将返回目标对象。 数组的自身属性不会被复制,因为它无法枚举。 另外,您可以使用ES6 传播语法来达到相同的结果:
问题内容: 转换的最佳方法是什么: 至: 问题答案: ECMAScript 6引入了易于填充的内容: 该方法用于将所有可枚举的自身属性的值从一个或多个源对象复制到目标对象。它将返回目标对象。 数组的自身属性不会被复制,因为它无法枚举。 另外,您可以使用ES6 传播语法来达到相同的结果:
问题内容: 我碰到SimpleXML对象转换为阵列的这种功能在这里: 因此,我对XML字符串的采用类似于: 它工作得很好,但似乎有点黑吗?有没有更有效/更强大的方法来做到这一点? 我知道SimpleXML对象与数组足够接近,因为它利用了PHP中的ArrayAccess接口,但与多维数组(即循环)一起使用时,仍然不能很好地工作。 谢谢大家的帮助 问题答案: 我在PHP手册注释中找到了这个: 它可以帮
问题内容: 我正在尝试将数组转换为对象,并且我快到了。 这是我的输入数组: 这是我当前的输出对象: 这是我想要的输出对象: 这是我当前的代码: 问题答案: 你不能那样做。 不是有效的JavaScript对象。 javascript中的对象是键值对。看看你的情况如何,然后是冒号,然后是数字?的是,号码是的。 如果执行此操作,则将无法访问属性。 这是Firefox控制台的结果:
问题内容: Java中是否有命令将ArrayList转换为对象数组。我知道如何将每个对象从arrayList复制到对象数组,但是我想知道是否会自动完成。 我想要这样的东西: 问题答案: 像标准Collection.toArray(T [])之 类的东西应该可以满足您的需求(请注意实现): 附带说明一下,您应该考虑将定义定义为类型,而不是,这样可以避免某些特定于实现的定义,而这些定义可能并不真正适用