猿问

函数式 if else 在布尔值上

我正在寻找一个非常基本的 if else 布尔可选值。我想念一些非常基本的东西

所以老派的巢穴是这样的

    if (filterValue.isPresent()) {
       if (filterValue.get()==true) {
            method1();
        } else {
            method2();
        }
    } else {
        method3();
    }

我尝试了 2 次替换的各种尝试

filterValue.map(o -> o.TRUE ? method1() : method2()).orElse(method3());

filterValue.isPresent(filterValue.get().TRUE ? method1() : method2());

似乎不太明白语法?

谁能指出我正确的方向?


函数式编程
浏览 152回答 3
3回答

万千封印

map不起作用,因为既没有method1也method2没有返回值。并且void不允许映射到。目前在 Java 8 中没有真正巧妙的解决方案,但如果您碰巧使用 Java 9,您可以通过ifPresentOrElse(Consumer<T>, Runnable>)以下方式实现:filterValue.ifPresentOrElse(value -> {&nbsp; &nbsp; if(value){&nbsp; &nbsp; &nbsp; &nbsp; method1();&nbsp; &nbsp; } else {&nbsp; &nbsp; &nbsp; &nbsp; method2();&nbsp; &nbsp; }}, () -> method3());

萧十郎

这将映射Optional到方法的返回值:filterValue.map(o -> o.TRUE ? method1() : method2()).orElse(method3());这不是你想要的,而且只有当方法返回一些东西并且它们之间兼容时它才会编译。虽然这无法编译,因为isPresent()它不接受任何参数但返回一个boolean:filterValue.isPresent(filterValue.get().TRUE ? method1() : method2());老派方式是满足您要求的方式。Optional被引入以防止NullPointerException。在某些特定情况下,当您想将 映射Optional到另一件事时,它会省去条件语句: Foo foo = Optional.map(..).map(...).get();。但是你不是在这个配置中:你想根据 3 个不同的状态来调用一个不同的方法Optional:存在和真、存在和假、不存在。Optional不要提供直接的方法来执行这样的逻辑。通过降低嵌套级别,您的代码可以更具可读性:if (filterValue.isPresent() && filterValue.get()) {&nbsp; &nbsp; method1();} else if (filterValue.isPresent()) {&nbsp; &nbsp; method2();} else {&nbsp; &nbsp; method3();}
随时随地看视频慕课网APP

相关分类

Java
我要回答