根据可选值调用void方法时如何使用Optional的map和orElseGet方法
How to use Optional's map and orElseGet methods when calling a void method based on the optional value
我有一个 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().orElseGet() 感到困惑,因为我也没有任何要转换的东西。任何使用任何 Java8 可选技术优化这段代码的建议都将不胜感激。
您已经拥有 java-8 version, but if you are using java-9 或更高的最佳版本,您可以使用 ifPresentOrElse
formsOptional.ifPresentOrElse(val -> doSomething(myValue, val),
() -> doSomething(myValue, Forms.builder().names(myList).build()));
使用 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 可选变量,我正在使用如下。
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().orElseGet() 感到困惑,因为我也没有任何要转换的东西。任何使用任何 Java8 可选技术优化这段代码的建议都将不胜感激。
您已经拥有 java-8 version, but if you are using java-9 或更高的最佳版本,您可以使用 ifPresentOrElse
formsOptional.ifPresentOrElse(val -> doSomething(myValue, val),
() -> doSomething(myValue, Forms.builder().names(myList).build()));
使用 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);