A primeira expressão lambda
Antes de Lambda aparecer, se precisássemos escrever um multithread, podemos precisar do seguinte método:
Runnable runnable = new runnable () {@Override public void run () {System.out.println ("hello runnable"); }}; ... thread.start ();O exemplo acima será muito mais fácil se você mudar para usar Lambda:
Runnable noargs = ()-> system.out.println ("Olá lambda! ~"); ... thread.start ();Uma expressão lambda é uma função anônima que passa comportamentos como dados. A expressão usa -> para separar os parâmetros do corpo, -> para preceder a parte do parâmetro e, em seguida, essa é a parte do corpo.
Outras formas de lambda
Binário do operador <long> add = (x, y)-> x+y; // ou binário operador <long> add = (longo x, longo y)-> x+y; // ou binário operador <long> add = (longo x, long y)-> {x+y; };O exposto acima são todas as formas de expressões de lambda.
Então a pergunta é:
O que o Binário do Binário <long> adicione = (longo x, longo y)-> x+y; significar?
Essa linha de código não fala sobre adicionar números, mas cria uma função para calcular o resultado da adição de dois números. O tipo de add é o binário -operador <long>, que não é a soma de dois números, mas o código que adiciona dois números. O exemplo a seguir mostra como usar esta variável:
Binário-operador <long> add = (longo x, longo y)-> x+y; Long res = add.Apply (3L, 4L); System.out.println ("res ="+res); // saída: res = 7 Interface da função
Uma interface de função é uma interface com apenas um método abstrato, usado como um tipo de expressão de lambda.
Por exemplo, o Runnable é uma interface de função.
Crie uma nova interface de função:
interface pública addoperator <t, d> {long add (t um, d dois);}usar:
Addoperator <long, long> addoperator = (x, y)-> x +y; System.err.println ("Função personalizada ouvinte res ="+addoperator.add (34L, 65L)); Tipo de destino
O tipo de destino refere -se ao tipo de contexto em que a expressão de Lambda está localizada. Por exemplo, atribua uma expressão lambda a uma variável local ou passe -a para um método como um parâmetro. O tipo de parâmetro local de variável ou método é o tipo de alvo da expressão lambda.
Final
Se fazemos referência à variável local no método na classe interna anônima, isso exige que a variável local seja final.
No Lambda, não precisamos declarar a variável local externa referenciada como final, mas a variável só pode ser atribuída uma vez.
No exemplo a seguir, se removermos os comentários e atribuirmos o nome novamente, ele não será compilado e uma mensagem de erro será exibida: as variáveis locais referenciadas de uma expressão lambda devem ser finais ou efetivamente finais.
A variável local referenciada pela expressão lambda deve ser final ou uma final factual.
Nome da sequência = getUserName (); // name = "hi"; button.addactionListener (event-> system.out.println ("name ="+name)); Digite inferência
A inferência do tipo de expressões lambda é uma extensão da inferência do tipo alvo introduzida no Java7.
Digite inferência em java7:
List <String> list = new ArrayList <> ();
No exemplo acima, não especificamos o tipo de paradigma do ArrayList, mas, em vez disso, inferimos o tipo de paradigma do ArrayList com base no tipo de lista.
Por exemplo: addoperator <long, long> addoperator = (x, y)-> x +y;
Através deste artigo, espero que possa ajudá -lo a aprender e entender essa parte do conhecimento. Obrigado pelo seu apoio a este site!