超全模态模型 × Harness 升级,升级解锁 ArkClaw,最新支持 DeepSeek-V4 系列与 GLM-5.1
嗨,这个场景我之前在项目里碰到过,给你几个实用的解决办法,适配不同的需求:
如果你的User类字段不多,直接手动提取每个字段转成Object再放到列表里最直接,也最不容易出错:
User
Object
val targetUser = User("Jane", "Smith") // 注意顺序要和你传给values方法的names列表顺序一致 val valuesList: List[Object] = List( targetUser.firstname.asInstanceOf[Object], targetUser.lastname.asInstanceOf[Object] )
其实Scala的String本身就是JavaObject的子类,这里的asInstanceOf可以省略,不过显式写出来能更清楚地表达我们的意图。
String
asInstanceOf
Scala的样例类默认实现了Product特质,通过它的productIterator方法可以拿到所有字段的迭代器,我们可以直接把这些字段转成Object列表:
Product
productIterator
val targetUser = User("John", "Doe") // 按样例类定义的字段顺序生成列表,要和Cassandra表字段/names列表顺序对应 val valuesList: List[Object] = targetUser.productIterator .map(_.asInstanceOf[Object]) .toList
这个方法的好处是不管你的样例类有多少字段,都不用手动一个个写,特别适合字段多或者后续可能加字段的场景。
如果你的项目里有很多样例类需要转成List<Object>,可以写一个扩展方法,让所有样例类都能直接调用:
List<Object>
// 定义扩展方法 implicit class ProductToObjectList(product: Product) { def toCassandraValues: List[Object] = product.productIterator .map(_.asInstanceOf[Object]) .toList } // 使用的时候就非常简洁: val targetUser = User("Alice", "Brown") val valuesList = targetUser.toCassandraValues
不管用哪种方法,必须保证字段的顺序和你传给values(List<String> names, List<Object> values)方法的names列表顺序完全一致,不然插入的数据会错位到错误的字段里哦!如果你的样例类里有Option类型的字段,还要记得处理None的情况(比如转成null或者Cassandra支持的空值)。
values(List<String> names, List<Object> values)
names
Option
None
null
内容的提问来源于stack exchange,提问作者Manu Chadha
超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起
模型再升级,30秒超长叙事, 模态参考扩容
模型自由,工具不限,最新支持 Deepseek-V4 系列、GLM-5.3 系列
超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列
大模型19元起,Al应用9.9元畅享,新人首购爆款尽享优惠