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.