我有一组项目,我们称它们为 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/