我有一个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()));