Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/16.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 Option.orElse等效于Java可选_Java_Scala_Functional Programming_Monads_Optional - Fatal编程技术网

Scala Option.orElse等效于Java可选

Scala Option.orElse等效于Java可选,java,scala,functional-programming,monads,optional,Java,Scala,Functional Programming,Monads,Optional,选项定义了以下方法: def orElse[B >: A](alternative : => scala.Option[B]) : scala.Option[B] 我试图在Java8中找到类似的东西。我想到了这个表达: private String userId() { return user.map(User::getUsername) .orElse(this.userId.orElseThrow(RuntimeException

选项
定义了以下方法:

def orElse[B >: A](alternative : => scala.Option[B]) : scala.Option[B]
我试图在Java8中找到类似的东西。我想到了这个表达:

private String userId() {
        return user.map(User::getUsername)
                .orElse(this.userId.orElseThrow(RuntimeException::new));
    }
其中,
user
userId
都是
可选的
,但不知何故,即使定义了
user
,它也会与
RuntimeException
一起崩溃。 Java中是否有比刚刚开始在
可选的
上设置条件更实用的功能?

使用:


当您使用普通
orElse
时,其参数在执行
orElse
本身之前执行,因此
orElse
只能返回它,但不能决定是否执行它。使用
orElseGet
创建lambda,该lambda仅在
可选
为空时执行。

您要查找的是Java 9中引入的方法:

public Optional<T> or​(Supplier<? extends Optional<? extends T>> supplier)

public可选或​(供应商不返回可选的返回:(
public Optional<T> or​(Supplier<? extends Optional<? extends T>> supplier)