在基于可选值调用 void 方法时如何使用 Optional 的 map 和 orElseGet 方法



我有一个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方法。由于这是一个void方法,我对如何使用map((.或ElseGet((感到困惑,因为我也没有任何要转换的内容。任何使用任何Java8可选技术优化这段代码的建议都将不胜感激。

使用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);

您已经拥有最好的java-8版本,但如果您使用的是java-9或更高版本,则可以使用ifPresentOrElse

formsOptional.ifPresentOrElse(val -> doSomething(myValue, val),
() -> doSomething(myValue, Forms.builder().names(myList).build()));

最新更新