使用Scala应用程序将List[Object]转换为case类
我正在编写一个Scala应用程序,用作后端数据库 当我查询Datomic时,它返回“行”作为使用Scala应用程序将List[Object]转换为case类,scala,deserialization,applicative,Scala,Deserialization,Applicative,我正在编写一个Scala应用程序,用作后端数据库 当我查询Datomic时,它返回“行”作为java.util.Lists ofLists ofjava.lang.Objects。例如: [ [ "Joe", "1970-04-15" ], [ "Mary", "1975-06-01" ] ] 我想以最具Scala风格的方式将这些类转换为case类 当前我的代码如下所示: import org.joda.time._ case class Person(name: String, da
java.util.List
s ofList
s ofjava.lang.Object
s。例如:
[
[ "Joe", "1970-04-15" ],
[ "Mary", "1975-06-01" ]
]
我想以最具Scala风格的方式将这些类转换为case类
当前我的代码如下所示:
import org.joda.time._
case class Person(name: String, dateOfBirth: LocalDate)
// assuming the query returns 1 row, get the row List
val row = result.iterator.next // e.g.: [ "Joe", "1970-04-15" ]
User(row.get(0).asInstanceOf[String],
LocalDate.parse(row.get(1).asInstanceOf[String]))
这有点难看,而且容易出错
有没有一种方法可以使用应用程序函子实现同样的功能?应用函子是最好的方法吗?有更好的方法吗?有一个由Clearcuid编写的名为的很好的库,它以类型安全的方式弥合了Datomic(Clojure)和Scala之间的鸿沟。看看他们是如何做到这一点的:
这是从他们的网站上直接拿出来的。Sweet!我想这正是我所需要的。@Ralph是的,当有人为你写一个库来做你想做的事情时总是好的。我倾向于写方轮。这实际上回答了我的问题,但我想我将使用@wheaties描述的技术。
result.collect {case name::date::Nil => Person(name.toString, LocalDate.parse(date.toString)}
// or case List(name,date) => ...
result.collect {case name::date::Nil => Person(name.toString, LocalDate.parse(date.toString)}
// or case List(name,date) => ...