You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Criação de dois novos exemplos. Um com uma interface funcional nossa, para tentar deixar mais claro o conceito. Outro com a utilização de expressão lambda em listas no Java 8, também para tentar deixar mais claro onde se costuma utilizar.
Uma melhoria no último exemplo para não confundir nada relacionado a Thread.
Issue #20
Veja que no exemplo acima é instanciada uma `Thread` com uma instância anônima de `Runnable`. Na segunda parte, é feito a mesma coisa de forma muito mais simples utilizando uma expressão lambda.
45
45
46
+
. Expressões lambda são sempre utilizadas para criar instâncias de interfaces funcionais, ou seja, interfaces que possuem apenas um único método abstrato.
Veja que no exemplo acima o mesmo método `executeEApresenteMensagem` é invocado duas vezes. Na primeira vez é passada uma nova classe anônima. Na segunda vez é passado uma expressão lambda.
62
+
+
63
+
Veja também que seria impossível criar uma expressão lambda caso a interface não fosse funcional, ou seja, tivesse mais de um método abstrato. Seria impossível para o compilador saber que o que está sendo implementado dentro da expressão lambda é o método `execute` da interface `Executavel`.
64
+
65
+
. Existem muitos métodos já disponíveis no Java 8 que se beneficiam da sintaxe de expressões lambda, como o `forEach` de listas.
Veja que o novo método `forEach` executa a expressão lambda passada como parâmetro para cada item da lista, imprimindo todos no console. Veja também que essa expressão lambda recebe como parâmetro um número, que é o número da lista.
84
+
+
85
+
Neste caso, a interface funcional que está sendo implementada pela expressão lambda é chamada `Consumer`. Ela será explicada em detalhes em uma seção posterior, juntamente com outras interfaces funcionais padrões do Java 8. Nesta seção é importante apenas entender o que são as expressões lambda e como é sua sintaxe.
86
+
46
87
. Declarações de expressões lambda podem ser completas ou simplificadas.
47
88
+
48
89
[source,java,indent=0]
@@ -104,9 +145,9 @@ Perceba que o compilador identifica que a variável `x3` é alterada no final do
No exemplo anterior, apenas o método `run` da interface funcional `Runnable` retorna uma `String`, enquanto o método `execute` da interface funcional `Executavel` não retorna nada (`void`). Isso é diferença suficiente para o compilador saber qual método chamar cada vez que `rode` é invocado.
148
+
No exemplo anterior, apenas o método `run` da interface funcional `Application` retorna uma `String`, enquanto o método `execute` da interface funcional `Executavel` não retorna nada (`void`). Isso é diferença suficiente para o compilador saber qual método chamar cada vez que `rode` é invocado.
108
149
+
109
-
Na primeira chamada ao método `rode`, como a expressão lambda passada retorna uma `String`, o compilador entende que essa expressão lambda é uma implementação da interface `Runnable`, pois o método `run` também retorna uma `String`.
150
+
Na primeira chamada ao método `rode`, como a expressão lambda passada retorna uma `String`, o compilador entende que essa expressão lambda é uma implementação da interface `Application`, pois o método `run` também retorna uma `String`.
110
151
+
111
152
Na segunda chamada ao método `rode`, como a expressão lambda não retorna nada (apenas imprime a `String` `"executando"`), o compilador entende que essa expressão lambda é uma implementação da interface `Executavel`, pois o método `execute` também não retorna nada.
0 commit comments