如何检查Java 8 Optional是否存在时如何返回值?

时间:2015-03-07 23:51:24

标签: java java-8 optional

如何返回值但确保检查.get()是否有效?

假设dateOptional<String>

methodThatTakesStringParam(date.ifPresent(s->s.get().replace("-", ""))) );  

如果我只是使用它并且执行.get会抛出它,如果它不存在!

methodThatTakesStringParam( date.get().replace("-", "") );  

我该如何处理?我看到的所有例子都是

date.ifPresent(System.out.println("showing that you can print to io is useless to me =)") 

但我希望在这种情况下返回一个字符串 - 如果.ifPresent()为false,则为空字符串。

1 个答案:

答案 0 :(得分:4)

听起来你想要的是:

methodThatTakesStringParam(date.map(s->s.replace("-", ""))).orElse(""));

(请参阅the Javadoc for Optional<U>.map(Function<? super T,? extends U>)date.map(s->s.replace("-", ""))大致相当于date.isPresent() ? Optional.of(date.get().replace("-", "")) : Optional.empty()。)


编辑添加:这就是说,在这种特殊情况下,写作可能更简单:

methodThatTakesStringParam(date.orElse("").replace("-",""));

因为"".replace("-","")无论如何都会提供""