加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

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)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读