Feature Java: Optional
A classe Optional foi introduzida no Java 8 para auxiliar os desenvolvedores a lidar de forma mais segura com valores que podem ser nulos, ou seja, que não estão presentes. Antes do Java 8, o retorno de null em métodos era comum e podia facilmente levar a erros no código, como o famoso NullPointerException. O Optional foi criado para minimizar esses problemas, oferecendo uma forma alternativa de tratar a ausência de valores sem recorrer ao uso de null.
O que é Optional?
Optional é uma classe contêiner que pode ou não conter um valor não-nulo. Seu principal objetivo é oferecer uma alternativa ao retorno nulo de métodos, que é uma fonte comum de erros, como o infame NullPointerException. Usando Optional, os desenvolvedores podem expressar de forma explícita que uma variável pode estar ausente, melhorando assim a clareza do código e a robustez.
Por que usar Optional?
- 
Redução de NullPointerExceptions: Ao invés de retornar
null, métodos podem retornar um objetoOptional, forçando os chamadores a tratar a possibilidade de valores ausentes. - 
Código mais expressivo: O uso de
Optionaltorna o código mais legível, indicando claramente as intenções do desenvolvedor em relação a presença ou ausência de dados. - 
Facilita o uso de APIs fluídas:
Optionalse integra bem com APIs baseadas em streams do Java 8, suportando operações funcionais comomap,flatMap, efilter. 
Exemplos de Uso de Optional
Exemplo 1: Criando e verificando a presença de valores
Optional<String> optionalNome = Optional.of("Gaspar");
if (optionalNome.isPresent()) {
    System.out.println("Nome: " + optionalNome.get());
} else {
    System.out.println("Nome não disponível.");
}
Exemplo 2: Uso de orElse e orElseGet
String nomeNulo = null;
String nome = Optional.ofNullable(nomeNulo).orElse("Nome padrão");
System.out.println(nome);  // Nome padrão
String outroNome = Optional.ofNullable(nomeNulo).orElseGet(() -> "Nome gerado dinamicamente");
System.out.println(outroNome);  // Nome gerado dinamicamente
Exemplo 3: Combinando Optional com Streams
List<String> nomes = Arrays.asList("Gaspar", null, "Laura", "Cecilia", null, "Murilo");
List<String> nomesFiltrados = nomes.stream()
    .map(Optional::ofNullable)
    .filter(Optional::isPresent)
    .map(Optional::get)
    .toList();
System.out.println(nomesFiltrados);  // [Gaspar, Laura, Cecilia, Murilo]
Conclusão
A classe Optional oferece uma forma segura e clara de lidar com valores que podem não estar presentes em seu código. Seu uso ajuda a prevenir erros comuns e melhora a legibilidade, facilitando a manutenção do software. Embora possa requerer um pouco de adaptação, o Optional é uma adição valiosa para qualquer projeto Java.