type问题,如果我删除instanceof,则如何为o定义类型,则它返回anyref,那么如何进行铸造呢?
def toList(dbObj: BasicDBList): Array[MaxMinValues] = {
dbObj.parallelStream().map { o =>
//print(o)
MaxMinValues(
o.asInstanceOf[BasicDBObject].get(Constants.maxCitationCount).asInstanceOf[Int],
o.asInstanceOf[BasicDBObject].get(Constants.minCitationCount).asInstanceOf[Int],
o.asInstanceOf[BasicDBObject].get(Constants.maxSearchCount).asInstanceOf[Int],
o.asInstanceOf[BasicDBObject].get(Constants.minSearchCount).asInstanceOf[Int],
o.asInstanceOf[BasicDBObject].get(Constants.maxReanalysisCount).asInstanceOf[Int],
o.asInstanceOf[BasicDBObject].get(Constants.minReanalysisCount).asInstanceOf[Int],
o.asInstanceOf[BasicDBObject].get(Constants.maxViewCount).asInstanceOf[Int],
o.asInstanceOf[BasicDBObject].get(Constants.minViewCount).asInstanceOf[Int]
)
}.asInstanceOf[Array[MaxMinValues]]
}
答案 0 :(得分:2)
BasicDBList#parallelStream()
返回java.util.stream.Stream<E>
,您可以将其变成scala.Stream
,以便您的map函数将采用部分函数。
您可以使用scala-java8-compat将java.Stream
变成scala.Stream
,
libraryDependencies += "org.scala-lang.modules" %% "scala-java8-compat" % "0.9.0"
然后您就可以将结果作为BasicDBObject
进行一次模式匹配,而不必在每一行上强制转换。
示例
import com.mongodb.BasicDBList
import com.mongodb.BasicDBObject
val list = new BasicDBList
list.add(new BasicDBObject(
"maxCitationCount", 1
))
list.add(new BasicDBObject(
"maxCitationCount", 2
))
import scala.compat.java8.StreamConverters._
final case class MaxMin(max: Int)
def toList(dbObj: BasicDBList): Stream[MaxMin] = {
dbObj.parallelStream().toScala[Stream].map {
case (o: BasicDBObject) =>
MaxMin(o.getInt("maxCitationCount"))
//TODO handle default case
}
}
val result = toList(list)
println(result) //Stream(MaxMin(1), ?)
如果要评估整个Stream
,请执行Stream.toList
或Stream.toArray
。
//evaluate stream
val result = toList(list).toList
println(result) // List(MaxMin(1), MaxMin(2))