2017-10-16 37 views
3

En Java 8, j'ai une variable qui contient un booléen optionnel.Comment faire une action si un booléen optionnel est vrai?

Je souhaite qu'une action soit exécutée si l'option n'est pas vide et que le booléen contenu est vrai.

Je rêve de quelque chose comme ifPresentAndTrue, voici un exemple complet:

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.")); 
    } 
} 

Répondre

13

Pour bon

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

Effacer.

+0

Serait bien d'avoir la possibilité d'abandonner ce code inutile "orElse (false)". C'est comme écrire "if (myBoolVariable == true)" - Je n'écris jamais "== true" ... Mais néanmoins, j'utilise aussi ce code exact car c'est le plus propre, rapide et facile à comprendre. – BAER

+0

@BAER Je suis allergique contre '== true' aussi. Regardé Java 9, mais cela ne semble pas mieux: 'wifeIsMale.stream(). Filter (Fonction :: identité) .forEach (b-> System.out.println (" Il ya un conjoint masculin. "));' –

1

Il est possible de réaliser ce comportement avec .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.")); 
    } 
} 

Cependant, il en coûte une exécution du cerveau temps secondes pour comprendre ce qui se passe ici.

+0

'filtre (Fonction :: identité)' à afficher. –

+0

@JoopEggen 'filter (Functions.identity())' ne fonctionne pas, les types ne sont pas compatibles. – slartidan

+0

Merci, booléen, pas booléen. –

0

Vous pouvez le réduire un peu.

Optional<Boolean> spouseIsMale= Optional.of(true); 
spouseIsMale.ifPresent(v -> { if (v) System.out.println("There is a male spouse.");});