scala – 将数据库(或键值存储)中的[String,Object]映射到无形可
发布时间:2020-12-16 19:18:29 所属栏目:安全 来源:网络整理
导读:将[String,Object]从DB(或键值存储)映射到无形可扩展记录 例: 让我们说我有一张地图 val fromDB: Map[String,Any] = Map("name" - "John","age" - 25) 知道字段“name”应该是一个字符串而字段“age”应该是一个整数,我如何将其转换为如下的无形可扩展记录
将[String,Object]从DB(或键值存储)映射到无形可扩展记录
例: 让我们说我有一张地图 val fromDB: Map[String,Any] = Map("name" -> "John","age" -> 25) 知道字段“name”应该是一个字符串而字段“age”应该是一个整数,我如何将其转换为如下的无形可扩展记录? val user = ("name" ->> "John") :: ("age" ->> 25) :: HNil 我的最终目标是创建一个如下对象,可以使用字段使用函数“fromDB”转换Map. object User { object name extends FieldOf[String] object age extends FieldOf[Int] def fromDB(data: Map[String,Any]) = { //TODO } } 我也愿意接受其他建议以及这样做的方法.谢谢. 解决方法
你可以使用TypeCase提取器来写得非常干净:
import shapeless._,syntax.singleton._ val StrCase = TypeCase[String] val IntCase = TypeCase[Int] def toUserRecord(m: Map[String,Any]) = for { StrCase(name) <- m.get("name") IntCase(age) <- m.get("age") } yield ("name" ->> name) :: ("age" ->> age) :: HNil 或者你可以使演员更明确一点: import syntax.typeable._ def toUserRecord(m: Map[String,Any]) = for { name <- m.get("name").flatMap(_.cast[String]) age <- m.get("age").flatMap(_.cast[Int]) } yield ("name" ->> name) :: ("age" ->> age) :: HNil 请注意,我正在返回一个Option [LongRecordTypeHere]以保持此类型安全 – 如果地图中不存在键或者值无法转换为正确的类型,我们将获得无. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容