2017-10-16 5 views
3

Java 8では、変数があり、オプションのブール値を保持しています。オプションのブール値がtrueの場合のアクションの実行方法は?

オプションが空でなく、含まれているブール値がtrueの場合、アクションを実行します。

私はここで、ifPresentAndTrueような何かについての完全な例を夢見ています:

import java.util.Optional; 

public class X { 
    public static void main(String[] args) { 
    Optional<Boolean> spouseIsMale = Optional.of(true); 
    spouseIsMale.ifPresentAndTrue(b -> System.out.println("There is a male spouse.")); 
    } 
} 

答えて

13

if (spouseIsMale.orElse(false)) { 
    System.out.println("There is a male spouse."); 
} 

クリア。

+0

不要なコード "orElse(false)"を削除する可能性がありますが、いいですね。それは "if(myBoolVariable == true)"と書くのと同じですが、 "== true"と書くことはありません...しかし、この正確なコードは、最もクリーンで、速く、理解しやすいので、私も使用します。 – BAER

+0

@ BAER私は '== true'に対してもアレルギーです。 Java 9を見ましたが、それは良く見えません: 'spouseIsMale.stream()。filter(Function :: identity).forEach(b-> System.out.println("男性の配偶者です ")) –

1

.filter(b -> b)とその動作を実現することが可能である:

import java.util.Optional; 

public class X { 
    public static void main(String[] args) { 
    Optional<Boolean> spouseIsMale = Optional.of(true); 
    spouseIsMale.filter(b -> b).ifPresent(b -> System.out.println("There is a male spouse.")); 
    } 
} 

しかし、それはいくつか脳の実行コスト時間は秒ここで何が起こっているのか理解する。

+0

「フィルタ(Function :: identity)」を表示します。 –

+0

@JoopEggen 'filter(Functions.identity())'が機能しません。型は互換性がありません。 – slartidan

+0

ありがとう、ブール値ではなくブール値です。 –

0

少し縮小できます。

良い順については
Optional<Boolean> spouseIsMale= Optional.of(true); 
spouseIsMale.ifPresent(v -> { if (v) System.out.println("There is a male spouse.");}); 
関連する問題