无法将 java.util.List 转换为 Scala 列表
unable to convert a java.util.List into Scala list
我想要 if
阻止 returns Right(List[PracticeQuestionTags])
但我做不到。 if/else
returnsEither
//I get java.util.List[Result]
val resultList:java.util.List[Result] = transaction.scan(scan);
if(resultList.isEmpty == false){
val listIterator = resultList.listIterator()
val finalList:List[PracticeQuestionTag] = List()
//this returns Unit. How do I make it return List[PracticeQuestionTags]
val answer = while(listIterator.hasNext){
val result = listIterator.next()
val convertedResult:PracticeQuestionTag = rowToModel(result) //rowToModel takes Result and converts it into PracticeQuestionTag
finalList ++ List(convertedResult) //Add to List. I assumed that the while will return List[PracticeQuestionTag] because it is the last statement of the block but the while returns Unit
}
Right(answer) //answer is Unit, The block is returning Right[Nothing,Unit] :(
} else {Left(Error)}
您的 finalList: List[PracticeQuestionTag] = List()
是 immutable
scala 列表。所以您无法更改它,这意味着无法添加、删除或更改此列表。
实现此目的的一种方法是使用 Scala 函数式方法。另一个是使用 mutable list
,然后添加到该列表,该列表可以是 if
表达式的最终值。
此外,while
表达式的计算结果始终为 Unit
,它永远不会有任何值。您可以使用 while
创建您的答案,然后 return 单独创建它。
val resultList: java.util.List[Result] = transaction.scan(scan)
if (resultList.isEmpty) {
Left(Error)
}
else {
val listIterator = resultList.listIterator()
val listBuffer: scala.collection.mutable.ListBuffer[PracticeQuestionTag] =
scala.collection.mutable.ListBuffer()
while (listIterator.hasNext) {
val result = listIterator.next()
val convertedResult: PracticeQuestionTag = rowToModel(result)
listBuffer.append(convertedResult)
}
Right(listBuffer.toList)
}
尽快将 java.util.List
列表更改为 Scala List
。然后你可以用 Scala 的方式处理它。
import scala.jdk.CollectionConverters._
val resultList = transaction.scan(scan).asScala.toList
Either.cond( resultList.nonEmpty
, resultList.map(rowToModel(_))
, new Error)
我想要 if
阻止 returns Right(List[PracticeQuestionTags])
但我做不到。 if/else
returnsEither
//I get java.util.List[Result]
val resultList:java.util.List[Result] = transaction.scan(scan);
if(resultList.isEmpty == false){
val listIterator = resultList.listIterator()
val finalList:List[PracticeQuestionTag] = List()
//this returns Unit. How do I make it return List[PracticeQuestionTags]
val answer = while(listIterator.hasNext){
val result = listIterator.next()
val convertedResult:PracticeQuestionTag = rowToModel(result) //rowToModel takes Result and converts it into PracticeQuestionTag
finalList ++ List(convertedResult) //Add to List. I assumed that the while will return List[PracticeQuestionTag] because it is the last statement of the block but the while returns Unit
}
Right(answer) //answer is Unit, The block is returning Right[Nothing,Unit] :(
} else {Left(Error)}
您的 finalList: List[PracticeQuestionTag] = List()
是 immutable
scala 列表。所以您无法更改它,这意味着无法添加、删除或更改此列表。
实现此目的的一种方法是使用 Scala 函数式方法。另一个是使用 mutable list
,然后添加到该列表,该列表可以是 if
表达式的最终值。
此外,while
表达式的计算结果始终为 Unit
,它永远不会有任何值。您可以使用 while
创建您的答案,然后 return 单独创建它。
val resultList: java.util.List[Result] = transaction.scan(scan)
if (resultList.isEmpty) {
Left(Error)
}
else {
val listIterator = resultList.listIterator()
val listBuffer: scala.collection.mutable.ListBuffer[PracticeQuestionTag] =
scala.collection.mutable.ListBuffer()
while (listIterator.hasNext) {
val result = listIterator.next()
val convertedResult: PracticeQuestionTag = rowToModel(result)
listBuffer.append(convertedResult)
}
Right(listBuffer.toList)
}
尽快将 java.util.List
列表更改为 Scala List
。然后你可以用 Scala 的方式处理它。
import scala.jdk.CollectionConverters._
val resultList = transaction.scan(scan).asScala.toList
Either.cond( resultList.nonEmpty
, resultList.map(rowToModel(_))
, new Error)