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

scala – 当对其中一个项目的检查返回false时,结束一个理解循环

发布时间:2020-12-16 19:00:21 所属栏目:安全 来源:网络整理
导读:我对 Scala有点新奇,所以道歉,如果这有点微不足道. 我有一个我想要迭代的项目列表.我要对每个项目执行一个检查,如果只有其中一个失败,我希望整个函数返回false.所以你可以看到这是一个AND条件.我想让它被懒惰地评估,即我遇到第一个虚假回报假的那一刻. 我习
我对 Scala有点新奇,所以道歉,如果这有点微不足道.

我有一个我想要迭代的项目列表.我要对每个项目执行一个检查,如果只有其中一个失败,我希望整个函数返回false.所以你可以看到这是一个AND条件.我想让它被懒惰地评估,即我遇到第一个虚假回报假的那一刻.

我习惯于for-yield语法,该语法过滤通过一些生成器(项目列表,序列等)生成的项目.然而,在我的情况下,我只想打破并返回false而不执行循环的其余部分.在正常的Java中,只会做一个返回false;在循环内.

以低效的方式(即当我遇到第一个假项目时不停止),我可以做到:

(for {
          item <- items
          if !satisfiesCondition(item)
        } yield item).isEmpty

这基本上是说,如果没有任何项目通过过滤器,它们都满足条件.但这似乎有点复杂和低效(认为你有100万项,第一个已经不满足条件).

在Scala中做最好的和最优雅的方法是什么?

解决方法

在第一次虚假的情况下尽早停止在Scala中使用forall. ( A related question)

您的解决方案重写:

items.forall(satisfiesCondition)

演示短路:

List(1,2,3,4,5,6).forall { x => println(x); x < 3 }
1
2
3
res1: Boolean = false

存在与之相反的情况,一旦满足条件即停止:

List(1,6).exists{ x => println(x); x > 3 }
1
2
3
4
res2: Boolean = true

(编辑:李大同)

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

    推荐文章
      热点阅读