Prezados, boa tarde.
Tenho uma dúvida em relação ao parâmetro vazio passado no construtor da Thread; contudo, após pensar um pouco acredito ter encontrado a solução da dúvida e no momento minha intenção é validar esse entendimento.
Inicialmente tentei a resolução da seguinte forma:
new Thread(r -> System.out.println("texto")).start();
O pensamento foi que a Thread recebe um Runnable (r) no construtor. Obviamente não resultou, pois como a solução mostra deve-se passar o argumento vazio, indicado apenas com os parênteses sem nada no interior.
Ao refletir sobre o gabarito a conclusão que cheguei foi que os parâmetros passados, seguindo a sintaxe do lambda, serão os parâmetros que o método abstrato da interface funcional receberia - ou seja, como o método run() da interface Runnable não recebe nenhum argumento, o parâmetro (i.e. o que vem antes da seta) é passado como vazio:
new Thread(() -> System.out.println("texto")).start();
Sendo mais sucinto, parece-me que na expressão lambda os parâmetros passados não têm ligação direta com o método que a usa como argumento, mas estará diretamente ligado ao método abstrato da interface funcional. A única ligação da expressão lambda com o método que a utiliza é na verdade em relação ao tipo.