Dans Java 8, j'ai une variable, contenant un booléen facultatif.
Je veux 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."));
}
}
Pour bon ordre
if (spouseIsMale.orElse(false)) {
System.out.println("There is a male spouse.");
}
Clair.
Il est possible d'obtenir ce comportement avec .filter(b -> b)
:
spouseIsMale.filter(b -> b).ifPresent(b -> System.out.println("There is a male spouse."));
Cependant, cela coûte temps d'exécution du cervea secondes pour comprendre ce qui se passe ici.
Toutes les réponses ci-dessus combinées:
spouseIsMale
.filter(Boolean::booleanValue)
.ifPresent(
value -> System.out.println("There is a male spouse.")
);
Pour ceux qui cherchent à écrire ceci sans la fonction if(condition){ //Do something if true; }
traditionnelle
Optional.of(Boolean.True)
.filter(Boolean::booleanValue)
.map(bool -> { /*Do something if true;*/ })
Ce que j'utilise habituellement est (je vérifie également la valeur nulle):
Optional.ofNullable(booleanValue).filter(p -> p).map(m -> callFunctionWhenTrue()).orElse(doSomethingWhenFalse());
Cela comprend trois parties:
Optional.ofNullable(booleanValue)
- Vérifie la valeur nulle.filter(p -> p).map(m -> callFunctionWhenTrue())
- Le filtre vérifie la valeur booléenne true et applique la fonction map.orElse(doSomethingWhenFalse())
- Cette partie s'exécutera si la valeur booléenne est fausseVous pouvez le rétrécir un peu.
Optional<Boolean> spouseIsMale= Optional.of(true);
spouseIsMale.ifPresent(v -> { if (v) System.out.println("There is a male spouse.");});