java—在基于可选值调用void方法时,如何使用optional的map和orelseget方法

tvz2xvvm  于 2021-06-26  发布在  Java
关注(0)|答案(2)|浏览(271)

我有一个java可选变量,如下所示。

Optional<Forms> formsOptional = input.data().get().forms();
if(formsOptional.isPresent()) {
    this.doSomething(myValue, forms.get());
} else {
    this.doSomething(myValue, Forms.builder().names(myList).build());
}

在这种情况下,dosomething方法是一种无效的方法。由于这是一个void方法,我对如何使用map().orelseget()感到困惑,因为我也没有任何东西要转换。任何使用java8可选技术优化这段代码的建议都将不胜感激。

xurqigkl

xurqigkl1#

使用 orElseGet(other) ,因此如果存在值,则不会执行生成器表达式。

Optional<Forms> formsOptional = input.data().get().forms();

Forms forms = formsOptional.orElseGet(() -> Forms.builder().names(myList).build());

this.doSomething(myValue, forms);

通常,您可以将其作为上一个方法链的一部分来执行,如果需要,您可以将其拆分为多行,以便澄清:

Forms forms = input.data()
                   .get()
                   .forms()
                   .orElseGet(() -> Forms.builder().names(myList).build());

this.doSomething(myValue, forms);
lxkprmvk

lxkprmvk2#

您已经有了最好的java-8版本,但是如果您使用的是java-9或更高版本,那么您可以使用 ifPresentOrElse ```
formsOptional.ifPresentOrElse(val -> doSomething(myValue, val),
() -> doSomething(myValue, Forms.builder().names(myList).build()));

相关问题