Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Lambdas

Bom, vou fazer um resuminho que eu entendi de onde veio a motivação para usar lambdas. Para não criarmos classes que só possuem um método (principalmente interfaces que possuem um único método) podemos usar classes anônimas.

Quando declaramos uma classe anônima, por baixo dos panos ele cria uma classe que implementa uma interface e a implementação do método. Como foi visto, a sintaxe de classes anônimas comprometem a legibilidade do código. Dessa forma, existem os lambdas para facilitar a legibilidade.

1º pergunta: Essa é a motivação para usar lambdas?

2º pergunta: Eu só consigo transformar em lambdas interfaces que definem somente um método? (Imagino que sim porque senão a JVM não saberia qual método executar)

3º pergunta: Como eu sei quais métodos conseguem usar um lambda no parâmetro de um método?

2 respostas

Uma expressão lambda é um bloco de código que pode ser passado para execução. É um recurso comum para algumas linguagens de programação, como Lisp, Python, Scala, etc. Mas antes do Java 8, não podíamos fazer o mesmo em Java. Se quiséssemos que um bloco de código seja executado, precisávamos criar um objeto e transmiti-lo como argumento. No Java 8, as expressões lambda nos permitem tratar a funcionalidade como argumento de método e transmitir um bloco de código.

Apenas interfaces com um método abstrato único é uma interface funcional que sua implementação pode ser tratada como expressões lambda.

solução!

Olá Leonardo, tudo bem ?

1º pergunta: Essa é a motivação para usar lambdas?

Isso mesmo, os códigos antes do Java8 ficavam muito mais verbosos e até difícil de compreender o que estava acontecendo, e outras linguagens já tinham ferramentas parecidas com as lambdas para contornar esse tipo de situação, então o java procurou também adotar uma maneira de simplificar :)

2º pergunta: Eu só consigo transformar em lambdas interfaces que definem somente um método? (Imagino que sim porque senão o compilador não saberia qual método executar)

Exato, é o que chamamos de interface funcional, ou seja, normalmente iremos utilizar com se fosse apenas uma função, ao invés de criar uma classe que implemente seu método

3º pergunta: Como eu sei quais métodos conseguem usar um lambda no parâmetro de um método?

Na maioria das vezes iremos descobrir quando lemos a documentação, seja do Java, ou da biblioteca que estamos utilizando, ainda assim, temos um pacote especifico (java.util.function) que define interfaces para ser utilizadas junto com as lambdas :)

Agora na maioria das vezes iremos utilizar esse recurso com os chamadas streams, mas isso é conteúdo para mais tarde :)

Assim que terminar a última parte de Java temos um curso que fala justamente dessa mudanças do Java8 que vai te dar uma base muito boa de quando utilizar as lambda functions: Curso Java8

Abraços e Bons Estudos!