更改Future内部的值(成功(某些(列表(BN))))

时间:2019-09-19 23:26:56

标签: scala

我有一个课程

String

和一个名为BnDAO的数据库

&'static str

在调用BnDAO来检索ID集的BN的过程中,我想根据String

更改结果BN的分数

这是我当前的代码

case class BN[A] (val BNId: Long, score: Double, child: A) 

谢谢!

//谢谢艾伦的回答。根据他的回答。是否可以在一个遍历内创建一组Future [Option [List [BN]]]和Long to List [Long]映射(infoId-> List [BNId])。

1 个答案:

答案 0 :(得分:0)

我不确定您的意思,因此我创建了两个答案。选择您想要的那个。

import scala.concurrent.duration._
val ids = scoreMap.keys.toVector
val futureBN = ids.map { id =>
  val curBNFut = interestsDAO.readAsync(id)
  val v = curBNFut.map(opt => opt.map(l => 
    id -> l.map(e =>
      scoreMap.get(e.id).map(escore => e.copy(score = escore)).getOrElse(e)
    )
  )
}
val mapResultFut = Future.sequence(futureBN).map(m =>
  m.flatMap(identity).toMap
)
val mapResult = Await.result(mapResultFut, 5.seconds)
val setFut = futureBN.map(fut => fut.map{opt => opt.map{case (id, l) => l }}).toSet

import scala.concurrent.duration._
val ids = scoreMap.keys.toVector
val futureBN = ids.map { id =>
  val curBNFut = interestsDAO.readAsync(id)
  val v = curBNFut.map(opt => opt.map(l => 
    id -> l.map(e =>
      scoreMap.get(id).map(escore => e.copy(score = escore)).getOrElse(e)
    )
  )
}
val mapResultFut = Future.sequence(futureBN).map(m =>
  m.flatMap(identity).toMap
)
val mapResult = Await.result(mapResultFut, 5.seconds)
val setFut = futureBN.map(fut => fut.map{opt => opt.map{case (id, l) => l }}).toSet

区别在于scoreMap.get的输入

我不确定您想要哪一个。

如果有任何错误,请发表评论。确保测试我的答案,以便它是您想要的。