我需要使用Java 8 Optional方法获取包装值,或者调用void返回Consumer lambda

我不熟悉在Java 8中使用选项。我知道方法orElseGet()需要一个供应商,orElseThrow()也需要一个抛出exception的供应商。 orElseThrow()可能是一个很好用的,如果我可以构造自己的exception并在触发该exception时执行某些操作。

我的主要目标是使用一个方法来获取未包装的值,或者如果可选的包装为null,则实际执行一个完全不同的函数。

寻找最接近的东西:

class DoInsteadClass { public void doInstead() { // Do this instead } } Optional myString = "Hello"; num.orElse(DoInsteadClass::doInstead); 

如果执行此操作的唯一方法是orElseThrow(),并且只要我可以使用’do this instead’代码处理exception,那也应该没问题。 它只是使我的代码库更大,因为我必须为2或3个案例创建一些不同的自定义实用程序供应商,其中一些可选值将返回null。

问题是,.ifPresent()用值调用指定的使用者,否则什么也不做。 如果值为null,我需要它来进行SOMETHING。 我当前的代码使用自定义的解决方法,我首先检查值是否为null,如果是,则执行所选的函数。 然后下一个语句是检查ifPresent()的语句。 所以这是做同样的事情,我只是在寻找更多糖衣,一个声明版本。

在JDK 9中,将有一个允许它的ifPresentOrElse 方法 。
但是,目前您可以选择if语句,使用if(num.isPresent()) ,或者编写自己的可重用ifPresentOrElse方法。