如何在 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")