我需要根据另一个可选值获取可选值。这是一个过于简化的例子:
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.
我知道我可以使用else / if for someA.isPresent()
但是我想尝试使用更短的方法(如果可能的话,使用可选的?上的map)。有小费吗?
答案 0 :(得分:6)
Optional someA = callSomeFunctionThatReturnsOptionalSomeA(....);
Optional someB = someA.map(n -> transformFirstResult(n));
这很简单。
如果someB
有值,则 transformFirstResult()
将包含someA
的返回值,否则将为空。 (如果transformFirstResult()
本身返回一个可选项,则需要使用flatMap()
代替map()
,以避免使用可选的可选项。)
这些方法(map()
,orElse()
,orElseGet()
,orElseThrow()
和filter()
)使Optional
真正有用。如果你只使用isPresent()
和get()
,那么你在实践中并没有真正赢得太多(尽管它使方法的契约更明确,这是一件好事)。
答案 1 :(得分:1)
怎么样:
return getA(...).isPresent() ? getB(...) : Optional.empty();