如何在 Cassandra Datastax 驱动程序中将 Java 集合转换为 Scala
How do I convert Java collections into Scala in Cassandra Datastax driver
我的 Cassandra
table 的架构是
id uuid PRIMARY KEY,
description text,
messages list<text>,
image list<blob>,
primary text,
tags set<text>,
title text,
more text
我可以从 table 中检索到 ResultSet
,但我不知道如何将其映射到我的模型中。 Scala
class
我想将行建模为
case class Data (id: Option[UUID],
description: String,
messages: List[String],
image: Array[Byte],
first: String,
tags: Set[String],
title: String,
more:String)
我知道函数 Row.getString("column name")
将 text
转换为 String
但我不知道如何转换 list<text>
、list<blob>
set<text>
变成 scala classes
。
要从 resultSet 中提取 set 并将其转换为 scala set,您可以定义一个函数,如下所示:-
def convertToScalaSet(row: Row, columnName: String): Set[String] =
{
val mayBeSet = Option(row.getSet(columnName, "String".getClass).toSet[String])
mayBeSet match {
case Some(set) if set.size > 0 => set
case _ => Set[String]() //this case will cover both the possibilities of set being empty or none value
}
}
在类似的行中,您可以创建一个将转换为 Scala 列表的函数
def convertToScalaList(row: Row, columnName: String): List[String] =
{
val mayBeList = Option(row.getList(columnName, "String".getClass).toList)
mayBeList match {
case Some(list) if list.size > 0 => list
case _ => List[String]() //this case will cover both the possibilities of list being empty or none value
}
}
然后在您的代码中,您可以按如下方式调用这些方法
val row = resultSet.one()
convertToScalaSet(row,"tags")
convertToScalaList(row,"messages")
我的 Cassandra
table 的架构是
id uuid PRIMARY KEY,
description text,
messages list<text>,
image list<blob>,
primary text,
tags set<text>,
title text,
more text
我可以从 table 中检索到 ResultSet
,但我不知道如何将其映射到我的模型中。 Scala
class
我想将行建模为
case class Data (id: Option[UUID],
description: String,
messages: List[String],
image: Array[Byte],
first: String,
tags: Set[String],
title: String,
more:String)
我知道函数 Row.getString("column name")
将 text
转换为 String
但我不知道如何转换 list<text>
、list<blob>
set<text>
变成 scala classes
。
要从 resultSet 中提取 set 并将其转换为 scala set,您可以定义一个函数,如下所示:-
def convertToScalaSet(row: Row, columnName: String): Set[String] =
{
val mayBeSet = Option(row.getSet(columnName, "String".getClass).toSet[String])
mayBeSet match {
case Some(set) if set.size > 0 => set
case _ => Set[String]() //this case will cover both the possibilities of set being empty or none value
}
}
在类似的行中,您可以创建一个将转换为 Scala 列表的函数
def convertToScalaList(row: Row, columnName: String): List[String] =
{
val mayBeList = Option(row.getList(columnName, "String".getClass).toList)
mayBeList match {
case Some(list) if list.size > 0 => list
case _ => List[String]() //this case will cover both the possibilities of list being empty or none value
}
}
然后在您的代码中,您可以按如下方式调用这些方法
val row = resultSet.one()
convertToScalaSet(row,"tags")
convertToScalaList(row,"messages")