scala – 用于理解过滤选项
发布时间:2020-12-16 09:06:30 所属栏目:安全 来源:网络整理
导读:我有一组项目,让我们称之为效果,我有一个具有一组可能效果的原因列表:设置[效果] 我需要遍历效果列表并且只返回我为每个效果找到的第一个原因.可能存在导致多个效果的重叠原因,这就是结果需要在集合中的原因.我需要尽可能快,因为它执行了很多次.我想出了以
我有一组项目,让我们称之为效果,我有一个具有一组可能效果的原因列表:设置[效果]
我需要遍历效果列表并且只返回我为每个效果找到的第一个原因.可能存在导致多个效果的重叠原因,这就是结果需要在集合中的原因.我需要尽可能快,因为它执行了很多次.我想出了以下内容(不确定它是否是最好的方式,我是scala的新手). 我试图使用find()方法返回一个Option [Cause].有没有办法过滤掉那些返回None的东西(它实际上不会发生,列表中总会有原因,除非我有一个bug),并在for comprehension中从some monad中提取它?我似乎无法在其中使用匹配. 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,所以可以将“=”更改为“< - ”,这将给出与flatten相同的结果
val firstCauses : Set[Cause] = (for { effect <- effects possibleCause <- allCauses.find(_.possibleEffects.contains(effect)) } yield possibleCause) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |