Propaganda

Se você é um programador Java e está interessado em aprender mais sobre o Java 8 lambdas, neste artigo, veremos mais de perto a sintaxe e o uso do lambda.

UMA expressão lambda em Java é uma maneira concisa de expressar um método de uma classe em uma expressão. Tem uma lista de parâmetros e um corpo. O corpo pode ser um único expressão ou um bloco 10 conceitos básicos de Java que você deve aprender ao iniciarEsteja você escrevendo uma GUI, desenvolvendo um software do servidor ou um aplicativo móvel usando o Android, aprender Java será útil. Aqui estão alguns conceitos principais do Java para ajudar você a começar. consulte Mais informação . É comumente usado onde é necessária uma implementação de uma interface. Essa necessidade geralmente surge quando uma interface é necessária como argumento para chamar um método.

Algumas expressões simples do Lambda

Vejamos alguns exemplos simples de expressões lambda.

A seguir, uma expressão lambda que aceita dois números x e y e calcula a soma.

(int x, int y) -> x + y; 

Solte os tipos de parâmetro para uma representação mais concisa:

(x, y) -> x + y; 

Defina uma função que não aceita parâmetros:

() -> 404; 

O seguinte também é válido, que não aceita parâmetros e não retorna nada:

() -> {}

Não há necessidade de parênteses incluindo parâmetros para um único parâmetro:

x -> x + 1. 

Blocos de código mais complexos também são possíveis. O lambda a seguir aceita um único linha parâmetro e faz algum processamento nele. Observe que o tipo do parâmetro é deduzido do contexto circundante:

linha -> { String [] x = pattern.split (linha); retornar novo Player (Integer.parseInt (x [0]), x [1], x [2], x [3], Integer.parseInt (x [4]); }

Codificação Limpa e Concisa

O uso de expressões lambda ajuda a tornar seu código limpo e conciso. Para ajudar nisso, as classes Java 8 fazem uso extensivo de lambdas.

Loop sobre uma lista ou um conjunto

Classes de coleção como Lista, Conjunto, Filae que implementem o Iterável interface que facilita o loop sobre os elementos.

Declare uma lista de nomes.

Lista nomes = Arrays.asList ("Joe", "Jack", "James", "Albert"); 

Repita a lista sem lambda:

for (String name: names) {System.out.println (name); }

Usando lambda, o loop acima pode ser escrito como:

names.forEach (name -> System.out.println (name)); 

Com as referências do método Java 8, o acima pode ser escrito de forma ainda mais concisa como:

names.forEach (System.out:: println); 

Loop sobre um mapa

UMA Mapa é um mapeamento de chaves para valores. Fazer um loop sobre um mapa envolve fazer um loop sobre cada um dos mapeamentos (chave, valor). Compare como você pode usar lambdas para esta situação.

Primeiro defina um mapa:

Mapa mapa = novo HashMap <> (); map.put ("Atlanta, Geórgia", 110); map.put ("Austin, Texas", 115); map.put ("Baltimore, Maryland", 105); map.put ("Birmingham, Alabama", 99); map.put ("Boston, Massachusetts", 98); 

Você pode percorrer este mapa da maneira tradicional:

para (Mapa. Entrada e: map.entrySet ()) {System.out.println (e.getKey () + "=>" + e.getValue ()); }

Aqui está como você pode fazer a mesma coisa de maneira rápida e concisa usando lambdas:

map.forEach ((k, v) -> System.out.println (k + "=>" + v)); 

Interfaces Funcionais

Qual é o tipo de retorno de uma expressão lambda? Em outras palavras, qual é o tipo de X na declaração a seguir?

X x = a -> a + 1; 

O tipo de retorno de uma expressão lambda é um interface funcional - uma interface com um único método abstrato. Você pode atribuir uma expressão lambda a uma interface com um método abstrato compatível. Alguns exemplos abaixo.

Criando uma tarefa multithread

Considere criar uma tarefa para execução em um thread separado 4 métodos para escrever código multiencadeado em JavaNeste artigo, comparamos algumas opções para escrever código multiencadeado em Java, para que você possa julgar melhor qual opção usar no seu próximo projeto Java. consulte Mais informação - você é obrigado a definir a tarefa como um Executável interface e implementar o corre() método. Aqui Executável é uma interface funcional.

classe MyTask implementa Runnable {... public void run () {// implemente sua tarefa aqui System.out.println ("Executando em um thread separado agora."); }... }

Você pode criar uma instância do Minha tarefa classe e use-a para iniciar um novo encadeamento de execução.

Tarefa MyTask = new MyTask (); Thread thread = new Thread (tarefa); thread.start (); 

Usando um lambda, o processo de criação de um Executável torna-se muito mais fácil. A definição da tarefa acima pode ser reescrita como:

Tarefa executável = () -> System.out.println ("Executando em um thread separado agora."); 

Ou até:

Thread thread = new Thread (() -> System.out.println ("Executando em um thread separado agora.")); thread.start (); 

Comparação usando um comparador

o Comparador é uma interface funcional para comparar objetos de um determinado tipo. Ele define um único método abstrato chamado comparar() que pode ser definido usando uma expressão lambda.

Aqui está uma expressão lambda criando um Comparador usado para comparar seqüências de caracteres sem distinção entre maiúsculas e minúsculas.

Comparador cmp = (x, y) -> x.compareToIgnoreCase (y); 

Uma vez que uma instância do Comparador interface funcional foi criada, pode ser reutilizada conforme necessário.

Aqui, classificamos uma lista de cadeias em ordem crescente.

Lista nomes = Arrays.asList ("Joe", "Jack", "James", "Albert"); Collections.sort (nomes, cmp); names.forEach (System.out:: println); // imprime. Albert. Jack. James. Joe. 

A lista acima está classificada no local. Agora podemos pesquisá-lo usando o binarySearch () método da seguinte maneira:

System.out.println ("search (Joe):" + Collections.binarySearch (nomes, "Joe", cmp)); # imprime. pesquisa (Joe): 3. 

Também é fácil calcular o máximo e o mínimo de uma lista usando lambdas.

Defina alguns dados:

Lista temps = Arrays.asList (110, 115, 105, 99, 98, 54, 109, 84, 81, 66, 72, 135, 115, 75, 82, 90, 88); 

Use uma expressão lambda para definir o comparador:

Comparador cmpTemp = (x, y) -> Integer.compare (x, y); 

E imprima o máximo e o mínimo:

System.out.println ("Max / Min"); System.out.println (Collections.max (temps, cmpTemp) + "/" + Collections.min (temps, cmpTemp)); 

Use na programação GUI

As expressões Lambda também são extremamente úteis na programação da GUI para implementar manipuladores de eventos. Aqui está um exemplo de como usar um manipulador de cliques de botão.

Botão JButton = novo JButton ("Clique em Mim"); button.addActionListener (e -> System.out.println ("Botão clicado!")); 

E foi uma rápida olhada no uso de lambdas no Java 8.

As lambdas tornaram sua vida mais fácil desde o Java 8? Por favor, explique nos comentários abaixo.