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

时间:2017-03-22 17:14:39

标签: 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. 

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

2 个答案:

答案 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();