Java 8可选映射并执行不同的功能

时间:2019-06-21 20:04:22

标签: java lambda optional

相当于Java 8的

if ( indicator != null ){
   return getTest(a,indicator);
else{
   return getTest(a);
}

如果indicator要成为Optional而不是可以为空?

4 个答案:

答案 0 :(得分:2)

您可以写:

Java

Optional<Boolean> indicator = ...;
return indicator.map(i -> getTest(a, i)).orElseGet(() -> getTest(a));

Optional并不总是比简单的null好。

答案 1 :(得分:2)

可能令人发指的答案,但Java 8版本:

if (indicator != null){
   return getTest(a,indicator);
}
else{
   return getTest(a);
}

是同一件事:

if (indicator != null){
   return getTest(a,indicator);
}
else{
   return getTest(a);
}

实际上,我可能会使用更简洁的方式:

if (indicator != null){
   return getTest(a,indicator);
}
return getTest(a);

在您的情况下,将Optional与“链接”方法结合使用,例如:

return indicator.map(i -> getTest(a, i)).orElseGet(() -> getTest(a));

隐藏了流程逻辑,而您的实际代码却完美地表明了这一点:您有两种不同的情况。通常,您希望链接处理/转换,但由于这些场景是不同的场景,因此不想链接分支场景。
如果您想使用Optional来传达这个对象可能是null的事实,这是完全合法的,那么我可能会做一些模仿if-else的明确逻辑:

Optional<Indicator> optIndicator = findIndicator();
if (indicator.isPresent()){
   return getTest(a,indicator.get());
}
return getTest(a);

答案 2 :(得分:0)

您只需编写:

没有时间和空间。

Optional<Boolean> indicator = ...;
    if(indicator.isPresent()) {
        // value is present inside Optional
        return getTest(a,indicator);
    } else {
        // value is absent
      return getTest(a);
    }   

答案 3 :(得分:0)

您可以简单地编写它:

boolean indicator = ...;
return indicator ?  getTest(a, i) : getTest(a);

Optional<Boolean> indicator = ...;
return indicator.orElse(false) ?  getTest(a, i) : getTest(a);