如果可选布尔值为 true,如何执行操作?

问题描述 投票:0回答:7

在 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."));
  }
}
java java-8 boolean option-type
7个回答
37
投票

为了良好的订单

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

清除。


17
投票

可以通过

.filter(b -> b)
实现该行为:

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

但是,需要一些大脑执行时间秒才能理解这里发生了什么。


12
投票

对于那些想在没有传统方式的情况下写这篇文章的人

if(condition){ //Do something if true; }

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

4
投票

以上所有答案综合起来:

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

1
投票

我通常使用的是(我也检查空值):

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,这部分将执行

0
投票

Optional.of(spouseIsMale).filter(Boolean::valueOf).orElse(false);


-1
投票

你可以把它缩小一点。

Optional<Boolean> spouseIsMale= Optional.of(true);
spouseIsMale.ifPresent(v -> { if (v) System.out.println("There is a male spouse.");});
© www.soinside.com 2019 - 2024. All rights reserved.