在选项上使用选项的干净方式 - Java?

Cus*_*Bun 1 java optional

我需要根据另一个可选值获取可选值.这是我的意思的一个过于简化的例子:

Optional<SomeA> someA = callSomeFunctionThatReturnsOptionalSomeA(....);
Optional<SomeB> someB = // if someA is present, call some method to get value of someB, if someA is not present, don't bother and just return an empty optional. 
Run Code Online (Sandbox Code Playgroud)

我知道我可以使用else/if for someA.isPresent()但是我想尝试使用更短的方法(如果可能的话,使用可选的?上的map).有小费吗?

biz*_*lop 6

Optional someA = callSomeFunctionThatReturnsOptionalSomeA(....); 
Optional someB = someA.map(n -> transformFirstResult(n));
Run Code Online (Sandbox Code Playgroud)

就这么简单.

someB将包含transformFirstResult()if someA具有值的返回值,否则将为空.(如果transformFirstResult()它本身返回一个可选项,则需要使用flatMap()而不是map()避免以可选的可选项结束.)

这是这些方法(map(),orElse(),orElseGet(),orElseThrow()filter()),让Optional真正有用的.如果你只使用isPresent()get(),你实际上并没有真正赢得太多(尽管它使方法的契约更明确,这是一件好事).