java8 - alandrade21/docsCompartilhados GitHub Wiki

Nesta página:

Lambda Functions

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();

Functional Interfaces

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.

Method Reference

É 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.

Java Shell

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.

⚠️ **GitHub.com Fallback** ⚠️