我有一组项目,我们称它们为 Effect ,我有一个 Cause 列表,其中包含一组 possibleEffects : Set[Effect]
我需要遍历效果列表,只返回我为每个 Cause 找到的第一个 Effect 。可能存在导致多个结果的重叠原因,这就是结果需要在一个集合中的原因。我需要尽可能快,因为它执行了很多次。我想出了以下方法(不确定这是否是最好的方法,我是 Scala 的新手)。

我正在尝试使用返回 find()Option[Cause] 方法。有没有办法过滤掉返回None的那些(实际上不会发生,列表中总会有原因,除非我有错误),并从理解中的Some monad中提取它?我似乎无法在其中使用 matches

  val firstCauses : Set[Cause] = (for {
             effect <- effects
             possibleCause = allCauses.find(_.possibleEffects.contains(effect))
             //todo: filter out possibleCause if it is not Some(Cause), and get it out of the Some monad so that the yield takes it
           } yield possibleCause).toSet

最佳答案

因为您可以在 for-comprehension 中迭代 Option,所以您可以将“=”更改为“

val firstCauses : Set[Cause] = (for {
     effect <- effects
     possibleCause <- allCauses.find(_.possibleEffects.contains(effect))
} yield possibleCause)

关于scala - 对于理解过滤选项,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20494643/

10-10 11:36