使用Scala applicative将List [Object]转换为case类

时间:2013-12-30 14:14:06

标签: scala deserialization applicative

我正在编写一个使用Play Framework作为后端数据库的Scala Datomic应用程序。

当我查询Datomic时,它会将“行”作为java.util.ListList的{​​{1}} s返回。例如:

java.lang.Object

我想以最可靠的Scala惯用方式将这些转换为案例类。

目前我的代码如下:

[
  [ "Joe", "1970-04-15" ],
  [ "Mary", "1975-06-01" ]
]

这有点丑陋且容易出错。

有没有办法使用applicative functor来实现同样的目的?应用仿函数是最好的方法吗?还有更好的方法吗?

2 个答案:

答案 0 :(得分:2)

Pellucid编写了一个名为Datomisca的好库,它以类型安全的方式填补了Datomic(Clojure)和Scala之间的空白。看看他们如何做conversions

val entity = database.entity(entityId)
val name   = entity.as[String](person / "name")
val age    = entity.as[Long](person / "age")

从他们的网站上直接拍摄。

答案 1 :(得分:2)

result.collect {case name::date::Nil => Person(name.toString, LocalDate.parse(date.toString)}
          // or case List(name,date) => ...