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。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |