web-dev-qa-db-fra.com

Comment faire une action si un booléen optionnel est vrai?

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

Pour bon ordre

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

Clair.

20
Joop Eggen

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.

6
slartidan

Toutes les réponses ci-dessus combinées:

spouseIsMale
.filter(Boolean::booleanValue)
.ifPresent(
  value -> System.out.println("There is a male spouse.")
);
3
dstibbe

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;*/ })
2
Sanjay K S

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:

  1. Optional.ofNullable(booleanValue) - Vérifie la valeur nulle
  2. .filter(p -> p).map(m -> callFunctionWhenTrue()) - Le filtre vérifie la valeur booléenne true et applique la fonction map
  3. .orElse(doSomethingWhenFalse()) - Cette partie s'exécutera si la valeur booléenne est fausse
0
Mudassir Shahzad

Vous 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.");});
0
Sergey Prokofiev