函数if if在布尔值上
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了函数if if在布尔值上相关的知识,希望对你有一定的参考价值。
我想在布尔可选值上做一个非常基本的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());
并不能完全得到语法?
有人能指出我正确的方向吗?
答案
map
不起作用,因为method1
和method2
都没有返回值。并且不允许映射到void
。
目前Java 8中没有真正的解决方案,但如果您碰巧使用Java 9,则可以使用ifPresentOrElse(Consumer<T>, Runnable>)
实现它:
filterValue.ifPresentOrElse(value -> {
if(value){
method1();
} else {
method2();
}
}, () -> method3());
另一答案
尽管如此,这不是你使用Optionals的方式,你可以这样试试:
import java.util.Optional;
public class Test {
public static void main(String[] args) {
final Optional<Boolean> filterValue = Optional.of(true);
// final Optional<Boolean> filterValue = Optional.of(false);
// final Optional<Boolean> filterValue = Optional.empty(); // thx @Holger
Runnable methodToCall = filterValue
.map(b -> b ? (Runnable) Test::method1 : (Runnable) Test::method2)
.orElse(Test::method3);
methodToCall.run();
}
private static void method1() {
System.out.println("Method1");
}
private static void method2() {
System.out.println("Method2");
}
private static void method3() {
System.out.println("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();
。
但是你不是这种配置:你想根据Optional
的3个不同状态调用一个不同的方法:present和true,present和false,ifsent。
Optional
不提供执行这种逻辑的直接方法。
通过降低嵌套级别,您的代码可以更具可读性:
if (filterValue.isPresent() && filterValue.get()) {
method1();
} else if (filterValue.isPresent()) {
method2();
} else {
method3();
}
以上是关于函数if if在布尔值上的主要内容,如果未能解决你的问题,请参考以下文章