无法将结果集转换为Cassandra datastax驱动程序中的列表

时间:2018-07-05 20:12:17

标签: scala

在下面的Cassandra代码中,我正在查询数据库,并期望多个值。该函数接受和id并应返回Option[List[M]],其中M是我的模型。我有一个函数rowToModel(row: Row): MyModel,它可以从row中提取一个ResultSet并将其转换为模型实例。

我的问题是,即使List有数据,我要返回的ResultSet始终为空。我通过在rowToModel

中添加调试打印来进行检查
def getRowsByPartitionKeyId(id:I):Option[List[M]] = {
val whereClause = whereConditions(tablename, id);

val resultSet = session.execute(whereClause) //resultSet is an iterator
val it = resultSet.iterator();
val resultList:List[M] = List();
if(it.hasNext){

  while(it.hasNext) {
    val item:M = rowToModel(it.next())
    resultList.:+(item)
  }
  Some(resultList) //THIS IS ALWAYS List()
} 
else
  None
}

我怀疑由于resultListval,因此其值在while循环中没有被更改。我可能应该使用yield或其他名称,但我不知道该如何使用。

1 个答案:

答案 0 :(得分:0)

通过将Java Iterator转换为Scala然后使用toList

解决了该问题
 import collection.JavaConverters._

val it = resultSet.iterator();

if(it.hasNext){

  val resultSetAsList:List[Row] = asScalaIterator(it).toList
  val resultSetAsModelList = resultSetAsList.map((row:Row) => rowToModel(row))
  Some(resultSetAsModelList)