避免在控制逻辑中使用isPresent()和get()

时间:2015-06-16 06:48:39

标签: java lambda functional-programming java-8 optional

在Java 8中执行以下操作是否有更漂亮的方法,避免使用isPresentget

void doStuff(String someValue, Optional<Boolean> doIt) {
    if (doIt.isPresent()) {
        if (doIt.get()) {
            trueMethod(someValue);
        } else {
            falseMethod(someValue);
        }
    }
}

我尝试使用map,但没有成功。但我可能没有那么努力?

2 个答案:

答案 0 :(得分:6)

您可以使用ifPresent代替isPresentget

void doStuff(String someValue, Optional<Boolean> doIt) {
    doIt.ifPresent (b -> {
                             if (b) 
                                 trueMethod(someValue);  
                             else
                                 falseMethod(someValue);
                         });
}

编辑:修复了我的代码,因为如果trueMethodfalseMethod没有返回任何内容,则无法使用三元运算符。

答案 1 :(得分:1)

这将是使用map

的功能方法
Function<Boolean, Void> logic = isTrue -> {
  if (isTrue) trueMethod(someValue);
  else falseMethod(someValue);
  return null;
};
doIt.map(logic);

然而,非常丑陋,主要是因为你的“功能不强”trueMethod / falseMethod,它们都返回void(领先对丑陋的return null)。