为了账号安全,请及时绑定邮箱和手机立即绑定

函数式 if else 在布尔值上

函数式 if else 在布尔值上

函数式编程 2021-07-29 14:07:59
我正在寻找一个非常基本的 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());似乎不太明白语法?谁能指出我正确的方向?
查看完整描述

3 回答

?
万千封印

TA贡献1891条经验 获得超3个赞

map不起作用,因为既没有method1也method2没有返回值。并且void不允许映射到。


目前在 Java 8 中没有真正巧妙的解决方案,但如果您碰巧使用 Java 9,您可以通过ifPresentOrElse(Consumer<T>, Runnable>)以下方式实现:


filterValue.ifPresentOrElse(value -> {

    if(value){

        method1();

    } else {

        method2();

    }

}, () -> method3());


查看完整回答
反对 回复 2021-08-04
?
萧十郎

TA贡献1815条经验 获得超13个赞

这将映射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()) {

    method1();

} else if (filterValue.isPresent()) {

    method2();

} else {

    method3();

}


查看完整回答
反对 回复 2021-08-04
  • 3 回答
  • 0 关注
  • 150 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信