Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scala 如何检查未来是否为空_Scala - Fatal编程技术网

Scala 如何检查未来是否为空

Scala 如何检查未来是否为空,scala,Scala,下面的代码返回一个未来 val findUserFuture: Future[Option[User]] = userRepo.findOne(userKeys) 然后我处理未来 findUserFuture.flatMap {....} .recover{...} 如果flatMap抛出异常,我假设将调用recover。但是如果findOne返回null,该怎么办?是否有Scala特定的方法来检查findUserFuture是否为null?如果(findUserFuture!=null)

下面的代码返回一个
未来

val findUserFuture: Future[Option[User]] = userRepo.findOne(userKeys) 
然后我处理
未来

findUserFuture.flatMap {....}
.recover{...}

如果
flatMap
抛出
异常,我假设将调用
recover
。但是如果
findOne
返回
null
,该怎么办?是否有
Scala
特定的方法来检查
findUserFuture
是否为
null
?如果(findUserFuture!=null)
我可以假设做
但是我想知道的是
Scala
提供了一些不同的方法来检查
null
s

你也可以使用
map
然后
匹配结果

Example:

import scala.concurrent.Future
import scala.concurrent.ExecutionContext.Implicits.global

val findUserFuture: Future[Option[User]] = userRepo.findOne(userKeys) 
findUserFuture.map { 
   case Some(v) => println(v) // Not Null...
   case None => println(None) // None or Empty result..
}

Hope it helps.

Future
Future
本身的结果以及
null
None
之间存在差异

null
是Java的遗留问题,通常不在Scala中使用。
未来
本身可能是
null
的唯一方法是如果
findOne
返回
null
,这是非常不可能的。因此,测试未来的
本身是没有用的

未来的结果是
Option[User]
,因此
flatMap
中的代码将给出一个
Some(User)
None
的值。您可以使用标准的
选项
方法来测试此值。通常,您会对值进行
匹配
,或者调用
映射
来处理内容(如果存在)。有许多stackoverflow答案解释了如何安全地取消选中
选项

请注意,
选项[User]
的值可能是
null
,但是,这不太可能,而且在库中可能是一个错误。

如果
findOne()
可能返回
null
(真的?似乎有点可疑),那么您可以做的一件事是将
null
转换为预期类型的实例

val findUserFuture: Future[Option[User]] = Option(userRepo.findOne(userKeys))
                                            .getOrElse(Future(None))

…然后继续正常处理。

不清楚您预期的是哪种情况
Future
包含值
null
Future
本身是
null
。如果
findOne()
返回一个
null
,然后映射它将抛出NPE。如果
null
则可以使用
case\u=>
更改
case None=>
以处理与第一个不匹配的所有内容。情况并非如此
null.map{…
将在计算任何
案例之前抛出。但基本上它不会是
null
,因为返回类型是
Future[Option[User]]
,所以您可能会得到
Future(Some(User(…))
Future(None)
)试试这个:
val findUserFuture:Future[Option[User]]=null
编译。现在
map()
覆盖它。它也会编译,但不会运行。谢谢。我想您正在调用
Option
apply
伴随对象(
apply[A](x:A):Option[A]
),它创建
一些(x)
如果参数不为null,则为
如果参数为null。-使用:
Future.successful(None)
-无需异步计算None。