Gostaria de saber como e para que usar a Interface Optional
Optional não é uma interface, é uma classe.
Em java, o uso de optional é basicamente pra evitar NullPointerException.
A recomendação é usar como tipo de retorno em métodos que poderiam retornar null.
Por exemplo, imagem uma classe com os seguintes métodos:
List<Person> searchByName(String name);
Person findById(int personId);
No método searchByName geralmente se não encontrar ninguém, você retorna uma lista vazia. Para quem chama esse método é muito fácil lidar com o resultado. Se tiver um for iterando na lista, simplesmente não faz nada, tudo funciona normal.
No método findById, se não encontrar a pessoa com aquele id, o que retorna? Você pode lançar uma exception, o que não é sempre ideal. Em muitos casos é retornado null. Daí é muito fácil alguém que chama esse método não conferir se o resultado é um objeto Person ou é null. O optional resolve isso. O método ficaria assim:
Optional<Person> findById(int personId);
Agora todo mundo chamando esse método sabe que o método pode retornar uma pessoa ou pode retornar vazio. Meio que incentiva a pessoa a tratar de alguma forma.
Em outras linguagens o uso de Optional/Maybe/Option é mais amplo, mas no java o caso de uso recomendado é basicamente esse.