【问题标题】:How to do an action if an optional boolean is true?如果可选布尔值为真,如何执行操作?
【发布时间】:2018-03-27 17:52:40
【问题描述】:

在 Java 8 中,我有一个变量,其中包含一个可选的布尔值。

如果可选项不为空,并且包含的​​布尔值为真,我希望执行一个操作。

我梦想着像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 optional


    【解决方案1】:

    为了良好的秩序

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

    清除。

    【讨论】:

    • 如果有可能放弃那些不必要的代码“orElse(false)”,那就太好了。这就像写“if (myBoolVariable == true)”——我从不写“== true”……但是,我也使用这个确切的代码,因为它最干净、快速且易于理解。
    • @BAER 我也对== true 过敏。看了 Java 9,但看起来并不好:spouseIsMale.stream().filter(Function::identity).forEach(b-&gt; System.out.println("There is a male spouse."));
    • 你也可以过滤一个你知道的 Optional。
    • 如果为假,有没有办法抛出异常? - 以 java8 方式 - 而不是使用 else 块
    【解决方案2】:

    使用.filter(b -&gt; b) 可以实现该行为:

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

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

    【讨论】:

    • @JoopEggen filter(Functions.identity()) 不起作用,类型不兼容。
    • 谢谢,布尔值,不是布尔值。
    【解决方案3】:

    对于那些希望在没有传统的情况下编写此内容的人 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.")
      );
      

      【讨论】:

        【解决方案5】:

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

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

        这包括三个部分:

        1. Optional.ofNullable(booleanValue) - 检查空值
        2. .filter(p -&gt; p).map(m -&gt; callFunctionWhenTrue()) - 过滤器检查布尔值 true 并应用 map 函数
        3. .orElse(doSomethingWhenFalse()) - 如果布尔值为 false,则执行此部分

        【讨论】:

        • 应该是orElseGet 而不是orElse。
        • 如果booleanValue 为空,它会抛出异常。 Error: | incompatible types: bad return type in lambda expression | java.lang.Object cannot be converted to boolean
        【解决方案6】:

        你可以把它缩小一点。

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

        【讨论】:

          猜你喜欢
          • 2013-10-04
          • 1970-01-01
          • 1970-01-01
          • 2021-06-19
          • 1970-01-01
          • 2014-04-25
          • 2014-01-24
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多