1. 程式人生 > >JDK8中`Optional.orElse()` 和`Optional.orElseGet()`之間的區別

JDK8中`Optional.orElse()` 和`Optional.orElseGet()`之間的區別

看例子就明白了

```

static String B() {
    System.out.println("B()...");
    return "B";
}

public static void main(final String... args) {
    System.out.println(Optional.of("A").orElse(B()));
    System.out.println(Optional.of("A").orElseGet(() -> B()));
}

prints

B()...
A
A

```

呼叫orElse時,將評估apicall()。值並將其傳遞給方法。 然而,在orElseGet的情況下,僅當oldValue為空時才進行評估。 orElseGet允許延遲評估。也就是說:orElse(T)無論前面Optional容器是null還是non-null,都會執行orElse裡的方法,orElseGet(Supplier)並不會

> 當然,在這個例子中,差異可能是不可測量的,但是如果你必須從遠端Web服務或資料庫中獲取預設值,它突然變得非常重要。