Expressões lambda com Java 8

entre as múltiplas novidades que o Java 8 nos oferece expressões lambda.
neste tutorial veremos o que você consiste, que tipos existem, como criá-los e Como usá-los.

Índice de conteúdo

  • 1. Introdução
  • 2. Ambiente
  • 3. Tipos
    • 3.1. Consumidores
    • 3.2. Fornecedores
    • 3.3. Funções
      • 3.3.1. Operadores UNARIOS
      • 3.3.2. Oponores binários
    • 3.4. Predicados
  • 4. Referência a métodos
  • 5. Use
  • 6. Conclusões
  • 7. Referências

introdução

lambda expressões são funções anônimas, ou seja, funções que não precisam de uma classe.
Sua sintaxe básica é detalhada abaixo:

Sintaxe

  1. o operador lambda (- >) separa a declaração de parâmetros da declaração da função da função.
  2. parâmetros:
    • Quando você tiver um parâmetro único não é necessário usar os parênteses.
    • quando você fizer Não tem parâmetros, ou quando você tem dois ou mais, é necessário usar parênteses.
  3. lambda corpo:
    • quando o corpo da expressão lambda tem uma única linha Não é necessário usar as chaves e não precisa especificar a cláusula de retorno caso eles devem retornar valores.
    • Quando o corpo da expressão lambda tiver mais de uma linha é necessário Para usar as teclas e é necessário incluir a cláusula de retorno no caso de a função Você deve retornar um valor.

Alguns exemplos de expressões lambda podem ser:

  • z – > z + 2
  • () – > system.out.println (” Mensagem 1 “)
  • int Length, int altura) – > {altura de retorno * Comprimento; }
  • (string x) – > {
    string return = x; return = return.concat (“***”);
    retorno de retorno;
    }

Como vimos expressões lambda são funções anônimas e podem ser usadas onde o tipo aceito é uma interface funcional, mas … O que é uma interface Funcional?
Uma interface funcional é uma interface com um e apenas um método abstrato. A declaração é exatamente a mesma que as interfaces normais com dois recursos adicionais:

  • tem um único método abstrato, como já dissemos.
  • opcionalmente pode ser testado como @ Funcionalinterface.

o motivo que a interface tem um único método abstrato é que será a expressão lambda que fornecerá a implementação para esse método.

Aqui estão alguns Exemplos de interface funcional:

java

1
2
4

td>

@funcionalInterface
Interface pública runnable {
Run polivalente ();
}

Java

1
2
3
4
5
6

public interface MiInterfaz {
default void saluda() {
System.out.println (“Uma saudação!”);
}
Resumo público int calcular (int data1, int data2);
}

java

1
2
5
6
7

/ div>

@funcionalInterface
comparador de interface pública {
/ / default e estático Os métodos são Eleved
int comparar (T O1, T O2);
// O método EqualS (Object Obj) é implicitamente implicitamente implementado pela classe Object.
Boolean é igual a (Object Obj);
}

ambiente

O tutorial é escrito usando o seguinte ambiente:

  • hardware: MacBook Pro 17 ‘(2.66 GHz Intel Core i7, 8GB DDR3 SDRAM).
  • sistema Operacional: Mac OS X Lion 10.10.3.
  • NVIDIA GeForce GT 330M 512MB.
  • MX100 SSD Crucial MX100 SSD 512 GB.

Tipos

lambda expressions podem ser classificados da seguinte forma:

  • consumidores.
  • fornecedores.
  • funções.
      operadores abertos.
  • operadores binários.
  • predicados.
  • vamos detalhar um por um e contar sobre o que eles consistem.

    3.1. Consumidores

    Esta é a expressões lambda que aceitam um único valor e não retornam nenhum valor.

    java

    mensagem de string – > system.out.println (mensagem);

    bicinstorming expressões, um caso especial de expressões consumidoras, são Aqueles que levam dois valores como um parâmetro e não retornam o resultado.

    java

    1

    (chave de string, valor de string) – > system.out.println (” tecla:% s, valor:% s% n “, Valor chave);

    3.2. Fornecedores

    Neste caso, são expressões que não têm parâmetros, mas retornam um resultado.

    java

    () – > return craaterandominteger ()

    3.3. Funções

    Essas expressões que aceitam um argumento e retornam um valor como resultado e cujos tipos não precisam ser os mesmos.

    java

    ordem persisted – > persistedr.etidientifier ();

    Bifunciações são essas expressões da função de tipo que aceitam dois argumentos e retornar um resultado.

    java

    1

    (endereço de endereço , Nome de string) – > nova pessoa (nome, endereço);

    3.3.1 operadores UNARIOS

    Caso especial de funções em que tanto o parâmetro como o valor retornado são do mesmo tipo.

    java

    mensagem de string – >

    3.3.2 Operadores binários

    mesmo que no caso de operadores abertos, é um caso especial de funções em que os dois argumentos e o resultado são de O mesmo tipo.

    java

    (Mensagem de string, string outra mermessage) – > mensagem.Concat (outraMessage);

    3.4. Previsto

    Estas são expressões que aceitam um parâmetro e retornam um valor lógico.

    java

    Mensagem de string – > mensagem.Comprimento > 50

    Como nos casos anteriores, você pode ter bipredicado, predicates que, em vez de ter um parâmetro, ter dois.

    java

    (caminho, att) – > string.valueof (caminho) .ValueOf (“. JS”) && attr.size () > 1024

    referências a métodos

    referências aos métodos permitem-nos reutilizar um método como Expressão lambda. Para fazer uso de referências a métodos, basta usar a seguinte sintaxe: referênciaBjective :: namename.

    java

    arquivo :: canread // em vez de arquivo f – > f.canread ();

    Com as referências aos métodos, uma anotação é oferecida rapidamente Para expressões simples de lambda e existem 3 tipos diferentes:

    • métodos estáticos.
    • métodos de instância de um tipo.
    • métodos de instância de um objeto existente .

    Exemplo de uso com o método estático:

    java

    2

    (string info) – > system.out.println (info) // expressão lambda sem referências.
    System.out :: Println // Expressão Lambda com referência ao método estático.

    Exemplo de uso com um método de tipo:

    java

    1

    (estudante de estudante , Int RegistryIndex) – > student.getrengistry (RegistryIndex) // lambda expressão sem referências.
    Student :: Getretistry // lambda expressão com referência a um método de tipo.

    Exemplo de uso com o método de um objeto existente:

    java

    1

    estudante Estudante – > Expressão de getmarks (aluno) // lambda sem referências.
    :: getmarks // expressão lambda com referência ao método de um objeto existente.

    use

    como temos Visto anteriormente, os lambados podem ser usados onde o tipo de parâmetros aceitos é uma interface funcional. Este é o caso de muitas das funcionalidades oferecidas pela Java.Util.stream, nova API que aparece com o Java 8, que permite a programação funcional em um fluxo de valores sem estrutura.

    Vamos ver alguns exemplos :

    Exemplo 1:

    java

    1
    3
    4
    5

    lista Alist = …
    alist .stream ()
    .findfirst (elemento – > element.getvalue () == value_to_compare)
    .ifpresent (System.out :: Println);

    Usando o código anterior que usamos lambdas para:

    • elemento – > element.getValue == Value_to_compare: Concedemos um predicado à função FindFirst da API de fluxo, esta função usará o predicado para retornar Um opcional (outra notícia de Java 8 que já tentou Daniel Díaz em seu tutorial brincando com a classe opcional em Java 8.) Congadual La Expresión Lambda.
    • system.out :: println: estabelegemos Unumidor de Unumidor Para La Función IFPRESENT, DE LA CLASE opcional, Que en Casco de Existência El Valor, Ejecutará La Expresión Lambda .

    ejemplo 2:

    java

    1
    2
    3
    4

    Mapa < string, inteiro > map = novo treemap <> ();
    map.put ….
    stringbuilder stringbuilder = novo stringbuilder ();
    map.foreach ((letra, número) – > stringbuilder.apend (letter.concat (string.valueof (número))));
    system.out.println (StringBuilder.ToString ());

    pt el anterior código ututilamos una lambda para procesar valores, Um Través de Un Consumidor, Que Concatena Los Valores Enteros Que Se Obtienen del Mapa.

    EJEMPLO 3:

    java

    1
    2
    3
    4
    6
    7

    tente (leitor bufferedReader = files.newbufedReader (caminhos.get (“somelines.txt”), standardcharsets.utf_8)) {
    leitor .lines ()
    flatmap (linha – > stream.of (linha.split (word_reegexp)))
    .distinct ( )
    .map (string :: tolofercase)
    .foreach (System.out :: println);
    }

    el código anterior Toma Un Fichero, Recorre Sus Línéas, Mapea Los Valores Obtenidos de Cada Linea Que Correspondente Relé Expresión Word_Regexp, Filtra Aquellos Que Sean Distintos, Los Pasa A Minosssculas y Los Impressão por Pantalla Uno Um Uno.

    • LINE – > stream.of (linha.split (Word_Regexp)): Devuelve ONU Los Valores Obtenidos de Aplicar La División de la Línea Mediate La Expresión Regular. El Método Flatmap Irá Recogiendo Los Streams Generados de Estação Manera Y Los Convertirá Um córrego UNICO QUE PODRÁ SER PROCESSADO CON POSTERIORIDAD.
    • string :: TOLOWCASE: Transformação Los Strings Del Stream A Minúsculas.
    • System.Out :: Println: Ya Lo Vimos Con anterior, MUestra Por Consolla Cada String.

    conclividades

    las expresiones lambda de java 8 Nos ofrecen varias mejoras CONIÇÃO A LAS Versiones anteriores:

    • Nos Acerca a la Programación funcional.
    • Hace Nuestro Código más precisão y legível, mejorando, en consecuencia, su mantenibilidad.
    • su utilización Junto Con La API Stream Hace Más Fácil La Ejecución Concurrente de Taréas.

    en este tutorial HEMOS MOSTRADO en Qué consistia y qué tipos feno, cuándo pueden utilizarse y las differentes Maneras de Utilizarlas. Pendiente de Posteriores Tutoriais Queda Tratar Aspectos Más Avanzados Como Streams Finitos E Infinitos, Utilización de Colectores O Depurando De Streams Y Expresiones Lambda.

    referencias

    • jdk 8 mooca: lambdas e fluxos introdução
    • oracle lambda expressões documentação

    si quieres Profundizar EN EN EN RESTO DE NUVEDADES QUE Incluye Java 8, Recuerda Que Ahora Puedes Asistir A Los Cursos Públicos de “Novedades de Java 8”, Donde Te Llevaremos de la Mano Para Experimentar Y Aprender A Sacar Todo El Partido de Todos Los Cambios Del Lenguaje. Así estarás al día. Puedes Comprenar Las Próximas Convocatorias del Curso “NouveDades Java 8”

    Deixe uma resposta

    O seu endereço de email não será publicado. Campos obrigatórios marcados com *