Java 8 - Expressões Lambda
As expressões lambda são introduzidas no Java 8 e são consideradas o maior recurso do Java 8. A expressão lambda facilita a programação funcional e simplifica muito o desenvolvimento.
Sintaxe
Uma expressão lambda é caracterizada pela sintaxe a seguir.
parameter -> expression body
A seguir estão as características importantes de uma expressão lambda.
-
Declaração de tipo opcional − Não há necessidade de declarar o tipo de um parâmetro. O compilador pode inferir o mesmo a partir do valor do parâmetro.
-
Parênteses opcionais em torno do parâmetro − Não há necessidade de declarar um único parâmetro entre parênteses. Para vários parâmetros, os parênteses são necessários.
-
Chaves opcionais − Não há necessidade de usar chaves no corpo da expressão se o corpo contiver uma única instrução.
-
Palavra-chave de retorno opcional − O compilador retorna automaticamente o valor se o corpo tiver uma única expressão para retornar o valor. Chaves são necessárias para indicar que a expressão retorna um valor.
Exemplo de expressões lambda
Crie o seguinte programa Java usando qualquer editor de sua escolha em, digamos, C:\> JAVA.
Java8Tester.java
Demonstração ao vivopublic class Java8Tester { public static void main(String args[]) { Java8Tester tester = new Java8Tester(); //with type declaration MathOperation addition = (int a, int b) -> a + b; //with out type declaration MathOperation subtraction = (a, b) -> a - b; //with return statement along with curly braces MathOperation multiplication = (int a, int b) -> { return a * b; }; //without return statement and without curly braces MathOperation division = (int a, int b) -> a / b; System.out.println("10 + 5 = " + tester.operate(10, 5, addition)); System.out.println("10 - 5 = " + tester.operate(10, 5, subtraction)); System.out.println("10 x 5 = " + tester.operate(10, 5, multiplication)); System.out.println("10 / 5 = " + tester.operate(10, 5, division)); //without parenthesis GreetingService greetService1 = message -> System.out.println("Hello " + message); //with parenthesis GreetingService greetService2 = (message) -> System.out.println("Hello " + message); greetService1.sayMessage("Mahesh"); greetService2.sayMessage("Suresh"); } interface MathOperation { int operation(int a, int b); } interface GreetingService { void sayMessage(String message); } private int operate(int a, int b, MathOperation mathOperation) { return mathOperation.operation(a, b); } }
Verifique o resultado
Compile a classe usando javac compilador da seguinte forma -
C:\JAVA>javac Java8Tester.java
Agora execute o Java8Tester da seguinte forma -
C:\JAVA>java Java8Tester
Deve produzir a seguinte saída -
10 + 5 = 15 10 - 5 = 5 10 x 5 = 50 10 / 5 = 2 Hello Mahesh Hello Suresh
A seguir estão os pontos importantes a serem considerados no exemplo acima.
-
As expressões lambda são usadas principalmente para definir a implementação em linha de uma interface funcional, ou seja, uma interface com apenas um único método. No exemplo acima, usamos vários tipos de expressões lambda para definir o método de operação da interface MathOperation. Em seguida, definimos a implementação de sayMessage de GreetingService.
-
A expressão lambda elimina a necessidade de classes anônimas e fornece uma capacidade de programação funcional muito simples e poderosa para Java.
Escopo
Usando a expressão lambda, você pode fazer referência a qualquer variável final ou variável efetivamente final (que é atribuída apenas uma vez). A expressão lambda gera um erro de compilação, se uma variável receber um valor pela segunda vez.
Exemplo de escopo
Crie o seguinte programa Java usando qualquer editor de sua escolha em, digamos, C:\> JAVA.
Java8Tester.java
Demonstração ao vivo
public class Java8Tester { final static String salutation = "Hello! "; public static void main(String args[]) { GreetingService greetService1 = message -> System.out.println(salutation + message); greetService1.sayMessage("Mahesh"); } interface GreetingService { void sayMessage(String message); } }
Verifique o resultado
Compile a classe usando javac compilador da seguinte forma -
C:\JAVA>javac Java8Tester.java
Agora execute o Java8Tester da seguinte forma -
C:\JAVA>java Java8Tester
Deve produzir a seguinte saída -
Hello! Mahesh
Java