Ответ 1
Для хорошего порядка
if (spouseIsMale.orElse(false)) {
System.out.println("There is a male spouse.");
}
Очистить.
В 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."));
}
}
Для хорошего порядка
if (spouseIsMale.orElse(false)) {
System.out.println("There is a male spouse.");
}
Очистить.
Можно добиться такого поведения с помощью .filter(b → b)
:
spouseIsMale.filter(b -> b).ifPresent(b -> System.out.println("There is a male spouse."));
Однако, чтобы понять, что здесь происходит, нужно потратить несколько секунд на выполнение мозгов.
Все вышеперечисленные ответы объединены:
spouseIsMale
.filter(Boolean::booleanValue)
.ifPresent(
value -> System.out.println("There is a male spouse.")
);
Для тех, кто хочет написать это без традиционного 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;*/ })
Вы можете немного уменьшить его.
Optional<Boolean> spouseIsMale= Optional.of(true);
spouseIsMale.ifPresent(v -> { if (v) System.out.println("There is a male spouse.");});
Обычно я использую (я также проверяю нулевое значение):
Optional.ofNullable(booleanValue).filter(p -> p).map(m -> callFunctionWhenTrue()).orElse(doSomethingWhenFalse());
Это состоит из трех частей:
Optional.ofNullable(booleanValue)
- Проверяет нулевое значение.filter(p -> p).map(m -> callFunctionWhenTrue())
- Фильтр проверяет булево значение true и применяет функцию карты.orElse(doSomethingWhenFalse())
- эта часть будет выполняться, если логическое значение равно false