我想创建一个scala案例类,其字段来自地图。而且,这是案例类
case class UserFeature(uid: String = null,
age: String = null,
marriageStatus: String = null,
consumptionAbility: String = null,
LBS: String = null,
interest1: String = null,
interest2: String = null,
interest3: String = null,
interest4: String = null,
interest5: String = null,
kw1: String = null,
kw2: String = null,
kw3: String = null,
topic1: String = null,
topic2: String = null,
topic3: String = null,
appIdInstall: String = null,
appIdAction: String = null,
ct: String = null,
os: String = null,
carrier: String = null,
house: String = null
)
假设地图实例是
Map("uid" -> "4564131",
"age" -> "5",
"ct" -> "bk7755")
如何将地图的键和值应用于案例类的字段和值?
答案 0 :(得分:1)
您可以UserFeature(uid = map_var("uid"), age = map_var("age"), ct = map_var("ct"))
假设持有Map
的变量为map_var
并且密钥可用
答案 1 :(得分:1)
使用null
表示缺少的字符串值不是一个好主意。请改用Option[String]
。
case class UserFeature(uid: Option[String] = None,
age: Option[String] = None,
marriageStatus: Option[String] = None,
...
完成后,您可以在地图上使用get
来检索值。
UserFeature(map.get("uid"), map.get("age"), map.get("marriageStatus") ...)
地图中显示的值为Some(value)
,缺失值为None
。 Option
类有许多有用的方法可以安全地处理可选值。
答案 2 :(得分:1)
综合其他两个答案,我会将String
中您默认为UserFeature
的所有null
转换为Option[String]
(除非与糟糕的交互,否则您基本上不应该在Scala中使用写入的Java代码需要它,甚至可以尽可能少地使用它来object UserFeature {
def apply(map: Map[String, String]): UserFeature =
UserFeature(map.get("uid"), map.get("age") ...)
}
。我离开了搜索和替换答案。
然后你可以这样做:
val someMap: Map[String, String] = ...
val userFeature = UserFeature(someMap)
允许您使用:
Option[String]
如果更改为BUG: scheduling while atomic
,则需要在代码库中进行一些其他更改。 https://danielwestheide.com/blog/2012/12/19/the-neophytes-guide-to-scala-part-5-the-option-type.html是如何处理Option的好教程。