2017-10-16 266 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)」 - 我從不寫「==真」......但是,儘管如此,我也使用這個確切的代碼,因爲它是最乾淨,快速和易於理解的。 – BAER

+0

@BAER我也對'== true'過敏。看着Java 9,但看起來不太好:'spouseIsMale.stream()。filter(Function :: identity).forEach(b-> System.out.println(「There is a male spouse。」));' –

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

'filter(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.");}); 
相關問題