Procurei um curso básico de lambda e aprendi que dentro dos parênteses ficam os argumentos e, do lado direito da seta e dentro de chaves, fica uma expressão. Durante o projeto a seguinte linha é usada:
assertThrows(IllegalArgumentException.class, () -> new CPF(""));
Eu entendi que o que a lambda nela faz é retornar o resultado da exception que é gerada caso o CPF seja vazio, mas por que não há chaves? Por que a lambda é diretamente passada como argumento e não uma expressão que chama ela? Por que ela é necessária?