当前位置: 首页 > 知识库问答 >
问题:

我需要使用一个Java8可选方法,该方法要么获取包装的值,要么调用一个void返回消费者lambda

钮勇
2023-03-14

我对在Java8中使用optionals是新手。我知道orElseGet()方法接受一个供应商,orElseThrow()也接受一个引发异常的供应商。如果我可以构造自己的异常,并在异常被触发时执行某些操作,orElseThrow()可能是一个很好的方法。

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

寻找最接近的东西:

class DoInsteadClass {
     public void doInstead() {
          // Do this instead
     }
}


Optional<String> myString = "Hello";
num.orElse(DoInsteadClass::doInstead);

如果唯一的方法是orElseThrow(),并且只要我能用“do this instead”代码处理异常,那么这也没问题。它只是使我的代码库更大,因为我必须为一些可选值返回null的2或3种情况创建几个不同的自定义实用程序供应商。

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

共有1个答案

郑俊彦
2023-03-14

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

 类似资料: