【发布时间】:2020-06-28 22:07:58
【问题描述】:
我正在尝试验证项目序列的未来。我的验证方法还返回布尔值的未来。我能够让它工作,但我不确定我自己是否理解这里发生的事情。
所以,我有一个有效的代码和一个无效的代码。有人知道这里发生了什么吗? 另外如何通过在地图之后链接过滤器来使其工作,以便将其全部集中在一个地方并且以后不必使用分配?
def main(args: Array[String]): Unit = {
println(Await.result(testMethod(), Duration.Inf))
}
def validationMethod(n: Int) = {
Future { n % 2 == 0 }
}
有效的代码:
def testMethod() = {
for {
seqOfIntegers <- Future { List(1, 2, 3, 4, 5, 6, 7, 8, 9, 10) }
numberToBooleanTupleSeq <- Future.sequence(seqOfIntegers.map {
number =>
validationMethod(number)
.map(validtedBooleanTuple => (number, validtedBooleanTuple))
})
finalIntegerSeq = numberToBooleanTupleSeq.filter(_._2).map(_._1)
} yield {
finalIntegerSeq
}
无效的代码:
def testMethod() = {
for {
seqOfIntegers <- Future { List(1, 2, 3, 4, 5, 6, 7, 8, 9, 10) }
finalIntegerSeq <- Future.sequence(seqOfIntegers.map {
number =>
validationMethod(number)
.map(validtedBooleanTuple => (number, validtedBooleanTuple))
.filter(_._2)
.map(_._1)
})
} yield {
finalIntegerSeq
}
}
【问题讨论】:
标签: scala future scala-collections for-comprehension