Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 8 从lambda非本地返回?_Java 8_Optional - Fatal编程技术网

Java 8 从lambda非本地返回?

Java 8 从lambda非本地返回?,java-8,optional,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("...")

我对编程非常陌生,所以请温柔一点!: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("...");
}
公共无效测试(可选测试字符串){
testString.ifPresent(s->{
//做些事情。。。
System.out.println(“退出方法”);
返回;
});
//如果不存在,则记录日志
Logger.log(“…”);
}

这里有一个代码片段。如果存在可选项,我将执行一些操作,并希望通过调用return退出该方法。现在我想知道为什么我的记录器记录了一些东西,尽管testString存在。有人能指出我遗漏了什么吗?谢谢大家!

问题是,当您这样做时:

 testString.ifPresent(s -> {
        //do stuff...
        System.out.println("Exit method");
        return;
    });
您可以从lambda函数返回,而不是像预期的那样从test()返回

尝试使用iPresent:

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

对于Java9,可选的将具有该方法

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

void ifPresentOrElse(我明白了,谢谢你指出。有没有办法从lambda中结束测试方法?我知道的唯一办法是抛出某种RuntimeException。不太好。好吧,我会接受你的建议。非常感谢!)您可以使用
completablefuture
等待lambdas中的计算,包括异步计算。这是一个很好的主意,我认为您应该将其作为一个替代方案发布。