Scala 用于理解响应 Future.filter 谓词不满足

问题描述 投票:0回答:1

我得到了以下代码

val obj1Seq: Future[Seq[Object1]] = /* call function returning Future[Seq[Object1]] */
val obj2Seq: Future[Seq[Object2]] = /* call function returning Future[Seq[Object2]] */
for {
  objects1 <- obj1Seq
  objects2 <- obj2Seq if (objects1.map(_.id) == objects2.map(_.relateObjId))
} yield {
  objects2
}

有了这个,我想从

Object2
列表中获取
relatedObjId
与相同
id
匹配的所有
objects1

我的问题是我不断收到错误

Future.filter predicate is not satisfied
我在这里阅读了一些其他问题(thisthisthis)并尝试使这些解决方案适应我的问题,但我没有得到解决

scala future for-comprehension
1个回答
0
投票

如果不满足谓词(序列比较),您会得到预期的错误。 IE。除了上述例外,您会得到

Future.failed

如果我理解你的需求,你宁愿想要这样的东西,它总是能带来成功的结果(如果两个最初的未来都成功):

val result: Future[Seq[Objects]] = for {
  objects1 <- obj1Seq
  objects2 <- obj2Seq
} yield {
  if (someCondition(objects1, objects2)) {
    // Some logic to get the desired results
    ???
  } else {
    Seq.empty
  }
}
© www.soinside.com 2019 - 2024. All rights reserved.