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

Scala未来与过滤器的理解

发布时间:2020-12-16 09:41:46 所属栏目:安全 来源:网络整理
导读:在下面的例子中我得到异常java.util.NoSuchElementException:Future.filter谓词不满足 我想要结果Future(Test2)当检查if(i == 2)失败。如何处理过滤器/如果在理解期间处理组合期货? 以下是Scala REPL中的简化示例。 码: import scala.concurrent.Futureim
在下面的例子中我得到异常java.util.NoSuchElementException:Future.filter谓词不满足

我想要结果Future(Test2)当检查if(i == 2)失败。如何处理过滤器/如果在理解期间处理组合期货?

以下是Scala REPL中的简化示例。

码:

import scala.concurrent.Future
import scala.util.{ Try,Success,Failure }
import scala.concurrent.ExecutionContext.Implicits.global

val f1 = Future( 1 )
val f2 = for {
  i <- f1
  if( i == 2 )
} yield "Test1"
f2.recover{ case _ => "Test2" }
f2.value

解决方法

在你的理解中,你是通过i == 2过滤的。因为f1的值不是两个,它不会产生一个成功而是一个失败。过滤器的谓词不满足,因为您的错误消息告诉您。然而,f2.recover返回一个新的未来。 f2的值不被操纵。它仍然存储失败。这就是您在调用f2.value时收到错误消息的原因。
我可以想到的唯一的选择是使用其他的在你的理解,如图 here。

val f2 = for ( i <- f1) yield {
  if (i == 2) "Test1"
  else "Test2"
}
f2.value

这将返回一些(Success(Test2))作为您的f3.value。

(编辑:李大同)

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

    推荐文章
      热点阅读