lambda的非本地回报?

时间:2016-09-07 19:13:17

标签: java-8 optional

我是编程新手所以请温柔! :d

public void test(Optional<String> testString){
    testString.ifPresent(s -> {
        //do stuff...
        System.out.println("Exit method");
        return;
    });
    //Log if it was not present
    Logger.log("...");
}

这里有一段代码片段。如果存在可选项,我会做一些事情并想通过调用return来退出方法。我现在想知道为什么我的记录器会记录某些内容,尽管testString存在。有人可以指出我错过了什么吗?谢谢!

2 个答案:

答案 0 :(得分:2)

问题是当你这样做时:

 testString.ifPresent(s -> {
        //do stuff...
        System.out.println("Exit method");
        return;
    });

你从lambda函数返回,而不是像你期望的那样从test()返回。

尝试使用isPresent:

    if (testString.isPresent()) {
        System.out.println("Exit method");
        return;
    }
    //Log if it was not present
    System.out.println("Not present");

答案 1 :(得分:2)

使用Java 9 Optional将具有方法

void ifPresentOrElse(Consumer<? super T> action, Runnable emptyAction)

处理else部分。现在你应该坚持已经接受的答案。