从函数返回,一旦函数中的值为null

时间:2019-05-22 10:17:44

标签: java java-8 optional

在不存在Optional值的情况下,我想退出当前方法/函数。

我尝试过一种幼稚的方法,将return语句放入.orElseGet()中,但这似乎不起作用。到目前为止,最好的选择似乎是:

private void foo(Set<ISomeObject> someIterable) {

    Optional<ISomeObject> myObjectOpt = someIterable
        .stream()
        .filter(...)
        .findFirst();

    if(!myObjectOpt.isPresent()){
        return;
    }

    ISomeObject myObject = myObjectOpt.get();
    // do something with myObject
}

这似乎比旧的Nullcheck可读性更好,还有其他选择吗?

2 个答案:

答案 0 :(得分:2)

您可以将Consumer传递给ifPresent,然后在使用者中执行您想做的任何事情:

private void foo(Set<ISomeObject> someIterable) {
    someIterable
        .stream()
        .filter(...)
        .findFirst()
        .ifPresent(x -> {
            // do something with x
        });
    // do nothing!
}

答案 1 :(得分:0)

好吧,似乎您想设置ISomeObject myObject的值,以防出现Optional的一种方法:

ISomeObject [] myObject = new ISomeObject[1]; // effectively final strikes again!

Optional<ISomeObject> myObjectOpt = someIterable
    .stream()
    .filter(...)
    .findFirst()
    .ifPresent(x -> myObject[0] = x);

但更简单的是:

myObject = someIterable
        .stream()
        .filter(...)
        .findFirst()
        .orElse(null); // in your code myObject is null by default anyway

但是,即使这没有多大意义,您是否要设置该字段,然后对其不执行任何操作?那么为什么要这样做呢?

当然,findFirst中的Set毫无意义。