从 Java 返回可选 ifPresent()

Fre*_*sen 6 java optional java-8

我知道你不能从 a 返回ifPresent()所以这个例子不起作用:

public boolean checkSomethingIfPresent() {
    mightReturnAString().ifPresent((item) -> {
        if (item.equals("something")) {
            // Do some other stuff like use "something" in API calls
            return true; // Does not compile
        }
    });
    return false;
}
Run Code Online (Sandbox Code Playgroud)

哪里mightReturnAString() 可以返回一个有效的字符串或一个空的可选。我所做的有效的是:

public boolean checkSomethingIsPresent() {
    Optional<String> result = mightReturnAString();

    if (result.isPresent()) {
        String item = result.get();
        if (item.equals("something") {
            // Do some other stuff like use "something" in API calls
            return true;
        }
    }
    return false;
}
Run Code Online (Sandbox Code Playgroud)

这更长并且与首先检查空值没有太大区别。我觉得必须有一种更简洁的方式来使用 Optional。

Nam*_*man 6

我认为您所寻找的只是简单地filter检查是否存在:

return result.filter(a -> a.equals("something")).isPresent();
Run Code Online (Sandbox Code Playgroud)

  • 除了 `a -&gt; a.equals("something")`,您还可以使用 `"something"::equals`。我不会将“其他内容”放在这里,因为您仍然可以将其作为独立操作链接起来,或者在该检查返回“true”时执行它。在后一种情况下,将无法访问该值,但当该值已被证明是“某物”时,您无论如何都不需要它。 (4认同)

shm*_*sel 5

映射到布尔值怎么样?

public boolean checkSomethingIfPresent() {
    return mightReturnAString().map(item -> {
        if (item.equals("something")) {
            // Do some other stuff like use "something" in API calls
            return true; // Does compile
        }
        return false; // or null
    }).orElse(false);
}
Run Code Online (Sandbox Code Playgroud)