java8 - alandrade21/docsCompartilhados GitHub Wiki
Nesta página:
Lambda functions são funções anônimas, funções que não tem um nome.
Equivalem às arrow functions do javascript.
Sintaxe: () -> {}
. Entre parênteses vem a lista de parâmetros. Entre chaves o corpo da função, que pode referenciar os parâmetros.
Uma lambda pode ser guardada em uma variável e passada como parâmetro.
Funções que antes eram implementadas como classes anônimas agora podem ser implementadas como lambda:
/**
* Prior Java 8
*/
Runnable runnable = new Runnable() {
@Override
public void run() {
System.out.println("Inside Runnable 1");
}
};
new Thread(runnable).start();
//Java 8 - Lambda Syntax
Runnable runnableLambda = () -> {
System.out.println("Inside Runnable 2");
};
new Thread(runnableLambda).start();
São interfaces que contém apenas um método abstrato.
O compilador java a partir da versão 8 permite que functional interfaces sejam implementadas como lambda functions.
Existe a anotação @FunctionalInterface
, que faz com que o compilador verifique se a classe anotada atende às especificações de uma functional interface (ser uma interface e conter apenas um único método abstrato).
No pacote java.util.function
existem várias interfaces funcionais já criadas.
É uma forma ainda mais resumida de se escrever uma lambda.
Exemplo com lambda:
Function<String, String> toUpperCaseLambda = (s) -> s.toUpperCase();
O mesmo exemplo com method reference:
Function<String, String> toUpperCaseMethodReference = String::toUpperCase;
Muito útil para chamar System.out::println
:
Consumer<String> consolePrinter = System.out::println;
É possível chamar um construtor do mesmo jeito: Classname::new
. Isso é chamado de Constructor Reference.
Ambiente REPL (Read Evaluate Print Loop), para testar a linguagem.
Roda com jshell -v
. -v
liga o verbose mode.
Se o jshell entrar em loop infinito em uma execução, interrompe a execução com ctrl + c
.
Sai do jshell com /exit
.