2017-08-21 5 views
1

にブール値を採用することができ、これを行うことができます。たちはOptionalsようJava8(ifPresentとorElse)Java8を使用して

Optional.ofNullable(realResult).orElse(mockResult); 

の代わりに:

if(realResult == null) 
    return mockResult; 
return realResult; 

質問:でした私たちは、 adobtブールはjava8に?

Boolean.valueOf(boolVar).ifTrue(trueResult).orElse(falseResult); 

の代わり:

if(boolVar) 
    return trueResult; 
return falseResult; 

編集#1 たちができるならば、まだ迷って、三元操作を示唆してくれてありがとうのか、言い換えれば、我々はそのような何かを書くことができますか?

+6

return boolVarで何が問題になりますか? trueResult:falseResult'? – ParkerHalo

+0

あなたはこのような振る舞いを持つ独自のクラスを作成することができます。それは難しいことではありません。 – ByeBye

+0

@ParkerHalo何も間違っています。 –

答えて

4

java.lang.BooleanifTrue()メソッドを持っていません。

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); 

...しかし、なぜだろうあなたプリミティブを使用して三項演算子は、メモリと操作の両方とも、明確短く、より効率的であるとき:

return b ? trueResult : falseResult; 
+0

BooleanクラスにifTrue()がないことが分かっていますが、C#拡張のようなものを追加できますか? –

+1

''ブール 'は' 'final'とマークされているため、拡張することはできません。 JavaにはC#拡張に似たものはありません。同様の機能(Groovy、Scala、...)を持つJVMベースの言語はありますが、Java自体はありません。 – slim

13

3進演算子は既に言語に含まれていますか?

boolVar ? trueResult : falseResult 

EDIT:あなたが本当にそのようなクラスをしたい場合、それは次のようになります方法は次のとおりです。

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; 
    } 
} 

使用法:

Conditional.valueOf(boolVar).ifTrue(trueResult).orElse(falseResult) 
+0

ブーリアンを採用することができるかどうかまだ疑問に思っています。 –

+1

@AhmedGhoneimいいえ、あなたはそれの拡張メソッドが必要で、Javaはこれをサポートしていません –

+0

'ifTrue'は' valueWhenTrue'を返さなければなりませんか? – azro

2

私は私のコードでそれを行うことはありませんが、あなたが聞いているので、あなたが使用することができますストリーム操作のこの種

2例:

private static String boolString(boolean boolVar) { 
    return Stream.of(boolVar).filter(b -> b).map(x -> "foo").findFirst().orElse("bar"); 
} 
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
private static int boolInt(boolean boolVar) { 
    return Stream.of(boolVar).filter(b -> b).map(x -> 1).findFirst().orElse(0); 
} 

ように使用する:

public static void main(String args[]) { 
    System.out.println(boolInt(true));  //1 
    System.out.println(boolInt(false));  //0 
    System.out.println(boolString(true)); //foo 
    System.out.println(boolString(false)); //bar 
} 

しかしternary-operatorまたはクラシックif滞在

0

を使用する方が簡単あなたはこのようなものを作成することができます

public class Wrap<T> { 

    private final boolean value; 

    public Wrap(final boolean value) { 
     this.value = value; 
    } 

    public Optional<T> ifTrue(final T ob) { 
     if(value) { 
      return Optional.ofNullable(ob); 
     } 
     return Optional.empty(); 
    } 

} 

そして:

public final class BooleanWraper { 

    private BooleanWraper() { 

    } 

    public static <T> Wrap<T> valueOf(final boolean value) { 
     return new Wrap<>(value); 
    } 

} 

そしてそれを使用します:

final String value = BooleanWraper.<String>valueOf(true) 
    .ifTrue("true") 
    .orElse("false"); 

最後にOptionalを使用しています。

関連する問題