我们可以像对Optionals一样采用布尔值到Java8(ifPresent和orElse)

Ahm*_*eim 2 java optional java-8

使用Java8,可以这样做:

Optional.ofNullable(realResult).orElse(mockResult);
Run Code Online (Sandbox Code Playgroud)

代替:

if(realResult == null)
    return mockResult;
return realResult;
Run Code Online (Sandbox Code Playgroud)

问题:我们可以选择布尔到java8吗?换句话说,我们可以这样写:

Boolean.valueOf(boolVar).ifTrue(trueResult).orElse(falseResult);
Run Code Online (Sandbox Code Playgroud)

代替:

if(boolVar)
    return trueResult;
return falseResult;
Run Code Online (Sandbox Code Playgroud)

编辑#1 感谢您建议三元运营,仍然想知道我们是否可以?

Pet*_*ser 13

如何使用已包含在语言中的三元运算符

boolVar ? trueResult : falseResult
Run Code Online (Sandbox Code Playgroud)

编辑:如果你真的想要这样一个类,那就是它的样子:

public class Conditional<T> {

    private final boolean condition;
    private T valueWhenTrue;

    public static Conditional valueOf(boolean condition) {
        return new Conditional(condition);
    }

    private Conditional(boolean condition) {
        this.condition = condition;
    }

    public Conditional ifTrue(T valueWhenTrue) {
        this.valueWhenTrue = valueWhenTrue;
        return this;
    }

    public T orElse(T valueWhenFalse) {
        return condition ? valueWhenTrue : valueWhenFalse;
    }
}
Run Code Online (Sandbox Code Playgroud)

用法:

Conditional.valueOf(boolVar).ifTrue(trueResult).orElse(falseResult)
Run Code Online (Sandbox Code Playgroud)


sli*_*lim 5

java.lang.Boolean没有ifTrue()方法。

你可以编写自己的实现Boolean并让它做你喜欢的任何事情,但我不明白你为什么不使用现有的模式来处理布尔值,这些模式工作得很好。

有很多奇怪而美妙的可能性:

 return Stream.of(Boolean.valueOf(b))
     .filter(Function.identity())
     .map( b -> trueResult)
     .findAny()
     .orElse( falseResult);

 ----

 return Optional.of(b)
     .filter(function.identity())
     .map( b -> trueResult)
     .orElse(falseResult);
Run Code Online (Sandbox Code Playgroud)

...但是当使用原语的三元运算符在内存和操作中都更清晰、更短且更高效时,您为什么要这样做:

 return b ? trueResult : falseResult;
Run Code Online (Sandbox Code Playgroud)