Tutoriais Java

Java HOME Introdução ao Java Java Começar Sintaxe Java Comentários Java Variáveis ​​Java Tipos de dados Java Cast de tipo Java Operadores Java Strings Java Java Math Java Booleanos Java Se... Senão Comutador Java Java While Loop Java para loop Java Break/Continuar Matrizes Java

Métodos Java

Métodos Java Parâmetros do método Java Sobrecarga do método Java Escopo Java Recursão Java

Classes Java

Java OOP Classes/objetos Java Atributos de classe Java Métodos de classe Java Construtores Java Modificadores Java Encapsulamento Java Pacotes Java / API Herança Java Polimorfismo Java Classes internas de Java Abstração Java Interface Java Enumerações Java Entrada de usuário Java Data Java Java ArrayList Java LinkedList Java HashMap Java HashSet Iterador Java Classes Java Wrapper Exceções Java Java RegEx Threads Java Java Lambda

Manipulação de arquivos Java

Arquivos Java Java Criar/Gravar Arquivos Arquivos de leitura Java Java Excluir Arquivos

Java como fazer

Adicionar dois números

Referência Java

Palavras-chave Java Métodos de String Java Métodos matemáticos Java

Exemplos Java

Exemplos Java Compilador Java Exercícios de Java Teste Java Certificado Java


Expressões Java Lambda


Expressões Java Lambda

As expressões lambda foram adicionadas no Java 8.

Uma expressão lambda é um pequeno bloco de código que recebe parâmetros e retorna um valor. As expressões lambda são semelhantes aos métodos, mas não precisam de nome e podem ser implementadas diretamente no corpo de um método.


Sintaxe

A expressão lambda mais simples contém um único parâmetro e uma expressão:

parameter -> expression

Para usar mais de um parâmetro, coloque-os entre parênteses:

(parameter1, parameter2) -> expression

As expressões são limitadas. Eles devem retornar imediatamente um valor e não podem conter variáveis, atribuições ou instruções como ifou for. Para realizar operações mais complexas, um bloco de código pode ser usado com chaves. Se a expressão lambda precisar retornar um valor, o bloco de código deverá ter uma returninstrução.

(parameter1, parameter2) -> { code block }

Usando expressões lambda

As expressões lambda geralmente são passadas como parâmetros para uma função:

Exemplo

Use uma expressão lamba no método ArrayList's forEach()para imprimir todos os itens da lista:

import java.util.ArrayList;

public class Main {
  public static void main(String[] args) {
    ArrayList<Integer> numbers = new ArrayList<Integer>();
    numbers.add(5);
    numbers.add(9);
    numbers.add(8);
    numbers.add(1);
    numbers.forEach( (n) -> { System.out.println(n); } );
  }
}

As expressões lambda podem ser armazenadas em variáveis ​​se o tipo da variável for uma interface que possui apenas um método. A expressão lambda deve ter o mesmo número de parâmetros e o mesmo tipo de retorno desse método. Java tem muitos desses tipos de interfaces embutidos, como a Consumerinterface (encontrada no java.utilpacote) usada por listas.

Exemplo

Use a interface do Java Consumerpara armazenar uma expressão lambda em uma variável:

import java.util.ArrayList;
import java.util.function.Consumer;

public class Main {
  public static void main(String[] args) {
    ArrayList<Integer> numbers = new ArrayList<Integer>();
    numbers.add(5);
    numbers.add(9);
    numbers.add(8);
    numbers.add(1);
    Consumer<Integer> method = (n) -> { System.out.println(n); };
    numbers.forEach( method );
  }
}

Para usar uma expressão lambda em um método, o método deve ter um parâmetro com uma interface de método único como seu tipo. Chamar o método da interface executará a expressão lambda:

Exemplo

Crie um método que receba uma expressão lambda como parâmetro:

interface StringFunction {
  String run(String str);
}

public class Main {
  public static void main(String[] args) {
    StringFunction exclaim = (s) -> s + "!";
    StringFunction ask = (s) -> s + "?";
    printFormatted("Hello", exclaim);
    printFormatted("Hello", ask);
  }
  public static void printFormatted(String str, StringFunction format) {
    String result = format.run(str);
    System.out.println(result);
  }
}