【问题标题】:How do I convert Java collections into Scala in Cassandra Datastax driver如何在 Cassandra Datastax 驱动程序中将 Java 集合转换为 Scala
【发布时间】:2018-12-17 21:06:34
【问题描述】:

我的Cassandra 表的架构是

id uuid PRIMARY KEY,
description text,
messages list<text>,
image list<blob>,
primary text,
tags set<text>,
title text,
more text

我能够从表中检索ResultSet,但我不知道如何将其映射到我的模型中。我想将行建模成的Scalaclass

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&lt;text&gt;list&lt;blob&gt;set&lt;text&gt; 转换为scala classes

【问题讨论】:

    标签: scala cassandra datastax-java-driver


    【解决方案1】:

    要从 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")
    

    【讨论】:

    • 谢谢,但 row.getList("messages","String".getClass).toList[String] 没有编译。 toList 未定义
    • row.getList("messages","String".getClass).asScala.toList[String] 似乎工作
    猜你喜欢
    • 1970-01-01
    • 2015-03-12
    • 2014-05-04
    • 1970-01-01
    • 2018-02-15
    • 1970-01-01
    • 2018-12-14
    • 1970-01-01
    • 2017-07-13
    相关资源
    最近更新 更多