我注意到如果我使用Optional可以通过以下方式:
Object returnValue = Optional.ofNullable(nullableValue)
         .map(nonNullValue -> firstMethod(arg1, nonNullValue))
         .orElse(secondMethod)
当nullableValue不为null时,它正在执行第一个方法和第二个方法.难道我做错了什么?当nullableValue不为null时,我希望它只执行firstMethod.
map和flatMap似乎有preCondition(if(!isPresent()).但是,orElse没有.如何在不使用if not null条件的情况下使用java8编写代码?
根据评论,示例代码:
public static String firstMethod(String someString) {
        System.out.println("In first method");
        return someString;
    }
    public static String secondMethod() {
        System.out.println("In second method");
        return "secondMethod";
    }
    public static void main(String a[]) {
        String nullableString = "nonNullString";
        String result = Optional.ofNullable(nullableString)
                .map(nonNullString -> firstMethod(nonNullString))
                .orElse(secondMethod());
        System.out.println("Result: "+result);
    }
输出:
In first method
In second method
Result: nonNullString
您正在调用第二种方法作为参数传递给orElse()调用.这orElse()不是那个呼叫呼叫中secondMethod()发生的事情的人map.您传递的返回值secondMethod()不是方法本身.
你想做什么:
Optional.ofNullable(nullableValue).map(MyClass::firstMethod).orElseGet(MyClass::secondMethod);
这样做是将secondMethod转换为供应商.这样,只有当optional为null时才会调用它.
| 归档时间: | 
 | 
| 查看次数: | 3682 次 | 
| 最近记录: |