如何将Scala中的case类成员转换为Java中的对象列表

时间:2018-04-20 05:06:46

标签: scala

我正在尝试使用Datastax Java驱动程序在Cassandra中插入一些值。

我有case class表示我要插入的值。

case class User(firstname:String, lastname:String)

insert的驱动程序的Cassandra方法看起来像

values(List<String> names, List<Object> values)

表架构是

CREATE TABLE users (
    firstname text,
    lastname text,
    PRIMARY KEY ((firstname, lastname))

User转换为List<Object>

的方法是什么?

2 个答案:

答案 0 :(得分:1)

获取案例类prop的Map:带反射的值,分区键和值,转换为java列表。

val usr = User("John", "Doe")
val map = (Map[String, AnyRef]() /: usr.getClass.getDeclaredFields) {
    (acc, field) =>
        field.setAccessible(true)
        acc + (field.getName -> field.get(usr))
}

val keys = map.keys.init.toList
val vals = map.values.init.toList

import collection.JavaConverters._
new SomeClass().values(keys.asJava, vals.asJava)

答案 1 :(得分:1)

02/04/2018无反射的一种方法:

java.util.List<Object>