Как выполнить действие, если необязательный логический тип true?

В Java 8 у меня есть переменная, содержащая необязательный логический тип.

Я хочу, чтобы действие было выполнено, если необязательный параметр не пустой, а содержащийся в нем логический тип имеет значение 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."));
  }
}

Ответ 1

Для хорошего порядка

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

Очистить.

Ответ 2

Можно добиться такого поведения с помощью .filter(b → b):

spouseIsMale.filter(b -> b).ifPresent(b -> System.out.println("There is a male spouse."));

Однако, чтобы понять, что здесь происходит, нужно потратить несколько секунд на выполнение мозгов.

Ответ 3

Все вышеперечисленные ответы объединены:

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

Ответ 4

Для тех, кто хочет написать это без традиционного if(condition){//Do something if true; } if(condition){//Do something if true; }

Optional.of(Boolean.True)
    .filter(Boolean::booleanValue)
        .map(bool -> { /*Do something if true;*/ })

Ответ 5

Вы можете немного уменьшить его.

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

Ответ 6

Обычно я использую (я также проверяю нулевое значение):

Optional.ofNullable(booleanValue).filter(p -> p).map(m -> callFunctionWhenTrue()).orElse(doSomethingWhenFalse());

Это состоит из трех частей:

  1. Optional.ofNullable(booleanValue) - Проверяет нулевое значение
  2. .filter(p -> p).map(m -> callFunctionWhenTrue()) - Фильтр проверяет булево значение true и применяет функцию карты
  3. .orElse(doSomethingWhenFalse()) - эта часть будет выполняться, если логическое значение равно false