Java Optionals: orElse ou orElseGet ?

 development, java

No Java 8 foram introduzidos os Optionals. Estes são extremamente uteis em vários cenários onde não há certeza de retorno de valores validos. Uma função que tende a causar um pouco de confusão é a .orElse e .orElseGet. A princípio parecem iguais mas há diferenças substaciais entre elas no que diz respeito a funcionalidade e performance. Ao observar a assinatura dos métodos public T orElse(T other) public T orElseGet(Supplier<? extends T> other) Podemos ver claramente que .orElse() retorna um valor do tipo T e aceita um valor do mesmo tipo, enquanto .orElseGet() retorna um valor do