BasicDBList#parallelStream()
возвращает java.util.stream.Stream<E>
, которое вы можете превратить в scala.Stream
, чтобы функция вашей карты приняла частичную функцию.
Вы можете использовать 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))