Carregar apresentação
A apresentação está carregando. Por favor, espere
PublicouJuliana Lopes Alterado mais de 7 anos atrás
1
Programação Lambda em Java 8 Juliana Lopes
2
O que é Lambda O lambda veio com o objetivo de adicionar ao Java técnicas de linguagens funcionais, como Scala e LISP.
3
O que são linguagens funcionais? Programação funcional baseia-se no conceito de função. Pode-se pensar na programação funcional como simplesmente avaliação de expressões.
4
Funcionamento: O programador define uma função para resolver um problema e passa essa função para o computador. Uma função pode envolver várias outras funções em sua definição. O que são linguagens funcionais?
5
O Computador funciona então como uma calculadora que avalia expressões escritas pelo programador através de simplificações até chegar a uma forma normal. Exemplo: f(x) = x³ + 3 é definida em termos de exponenciação e adição. O que são linguagens funcionais?
6
Atualmente mais usada para fins acadêmicos. Notáveis usadas para fins comerciais: R (estatística) Mathematica (matemática simbólica) K (análise financeira)
7
Cálculo Lambda Projetado por Alonzo Church, 1930; É um modelo que oferece uma maneira muito formal de descrever um cálculo de uma função;
8
Calculo Lambda Pode ser considerado a primeira linguagem de programação funcional; Linguagens como Lisp, Miranda, ML, Haskell são baseadas em Cálculo Lambda.
9
O Cálculo Lambda pode ser visto como uma linguagem de programação abstrata em que funções podem ser combinadas para formar outras funções; Cálculo Lambda
10
Trata funções como, entidades que podem, como um dado qualquer, ser usadas como argumento e retonados como valores de uma função. Cálculo Lambda
11
Lambda Também é baseado em um Domain Specific Language(DSL) que facilita muito a criação de código legível.
12
O que é Domain Specific Language? Domain Specif Language ou Linguagem de Domínio Específico, em português, são os paradgimas e funções, ou códigos específicos, de uma linguagem de programação ou linguagem de especificação dedicada a um domínio de problema particular; Ou seja, é o nome dado a prática de se criar pequenas linguagens para resolver um problemas bem específicos.
13
Vantagem do lambda A grande vantagem de funções lambda é diminuir a quantidade de código necessária para a escrita de algumas funções. O cálculo lambda é uma forma mais simplificada de codificar funções recursivas.
14
O que eu consigo fazer utilizando o Lambda? a) filtrar itens dada uma condição;
15
b) selecionar determinados atributos dos itens; O que eu consigo fazer utilizando o Lambda?
16
c) atribuir valores as propriedades de cada item; O que eu consigo fazer utilizando o Lambda?
17
d) ordenar os itens através de seus atributos; O que eu consigo fazer utilizando o Lambda?
18
e) agrupar itens; O que eu consigo fazer utilizando o Lambda?
19
f) somar valores de um determinado atributo numérico dos itens; O que eu consigo fazer utilizando o Lambda?
20
g) concatenar atributos dos itens.
21
As funções lambda em Java tem a sintaxe definida como (argumento) -> (corpo). (int a, int b) -> { return a + b; } () -> System.out.println("Hello World"); (String s) -> { System.out.println(s); } () -> 42 () -> { return 3.1415 }; a -> a > 10
22
((Uma função lambda é uma função sem declaração, isto é, não é necessário colocar um nome, um tipo de retorno e o modificador de acesso. A ideia é que o método seja declarado no mesmo lugar em que será usado. Uma função lambda pode ter nenhum ou vários parâmetros e seus tipos podem ser colocados ou podem ser omitidos, assim, eles são inferidos pelo Java (veremos alguns exemplos disso mais para frente). A função lambda pode ter nenhum ou vários comandos: se a mesma tiver apenas um comando, as chaves não são obrigatórias e a função retorna o valor calculado na expressão; se a função tiver vários comandos, é necessário colocar as chaves e também o comando return - se nada for retornado, a função tem um retorno void. ))
23
Funções Lambda com Threads
24
Vamos implementar programa que cria uma thread com uma função interna e que vai apenas mostrar a mensagem “Thread com classe interna!”.
25
Runnable r = new Runnable(){ public void run(){ System.out.println("thread com classe interna!"); } }; new Thread(r).start();
26
Já com a utilização de expressões lambda, o código ficará mais simples e bem menor que o anterior. O exemplo 2 mostra um exemplo do código da expressão lambda com threads.
27
Runnable r = () -> System.out.println("Thread com função lambda!"); new Thread(r).start();
28
Essa expressão não passa nenhum parâmetro, pois ela será passada para a função run, definida na interface Runnable, que não tem nenhum parâmetro, então ela também não tem nenhum retorno.
29
Um código ainda mais simples é a passagem da função diretamente como parâmetro para o construtor da classe Thread. O exemplo 3 mostra um exemplo desse código
30
new Thread ( () -> System.out.println("hello world") ).start();
31
Funções Lambda com as classes de Collections
32
O exemplo 4 mostra um exemplo de como normalmente é feito o código para percorrer uma lista e imprimir os valores dentro dela.
33
//Imprimindo os elementos de uma lista System.out.println("Imprime os elementos da lista!" ); List list = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9); for (Integer n: list){ System.out.println(n); }
34
Com as funções lambda basta chamar o método forEach de uma lista, que é um método que espera uma função lambda como parâmetro. O exemplo 5 mostra o exemplo de imprimir todos os elementos de uma lista com expressão lambda.
35
//Imprimindo os elementos de uma lista com expressões lambda System.out.println("Imprime todos os elementos da lsita!"); List list = Arrays.asList(1, 2, 3, 4, 5, 6, 7); list.forEach(n -> System.out.println(n));
36
Funções lambda podem ser utilizadas também para a ordenação de listas com a interface Comparator. Por exemplo, caso exista uma classe Pessoa com os atributos nome e idade e é necessário ordenar uma lista em ordem alfabética pelo nome, ou em ordem das idades, é necessário implementar dois comparators, um para cada tipo de parâmetro, e chamá-lo no método sort da lista que será ordenada. O exemplo 6 mostra o código do exemplo descrito utilizando a interface Comparator tradicional.
37
System.out.println("Ordenado pessoas pelo nome:"); List listPessoas = Arrays.asList(new Pessoa("Nazare", 52), new Pessoa("Juliana", 25)); Collections.sort(listPessoas, new Comparator (){ @Override public int compare(Pessoa pessoa1, Pessoa pessoa2) { return pessoa1.getNome().compareTo(pessoa2.getNome()); } }); listPessoas.forEach(p -> System.out.println(p.getNome())); COMPARATOR TRADICIONAL
38
//Comparator com expressões lambda List listPessoas = Arrays.asList(new Pessoa("Nazare", 52), new Pessoa("Juliana", 25)); System.out.println("Ordenando pessoas pelo nome: "); Collections.sort(listPessoas, (Pessoa pessoa1, Pessoa pessoa2) -> pessoa1.getNome().compareTo(pessoa2.getNome())); listPessoas.forEach(p -> System.out.println(p.getNome())); E AGORA UM COMPARATOR COM EXPRESSÕES LAMBDA
39
Vejam que os dois exemplos implementam exatamente a mesma funcionalidade, mas o código utilizando expressões lambda tem poucas linhas, enquanto que o código que não utiliza expressões lambda tem quase 10 linhas.
40
Com expressões lambda também é possível filtrar elementos de uma coleção de objetos criando para isso um stream de dados (também um novo conceito do Java 8). É chamado o método filter do stream e como parâmetro para esse método é passado uma função lambda que faz o filtro dos elementos desejados. O exemplo 7 mostra dois exemplos de filtros sendo realizados na listagem de pessoas. O primeiro filtro é feito apenas para pessoas com mais de 30 anos e o segundo para apenas pessoas que tem o nome iniciado com a letra “J”.
41
List listPessoas = Arrays.asList(new Pessoa("Nazare", 32), new Pessoa("Juliana", 25)); System.out.println("Pessoas com mais de 30 anos:"); List maioresTrinta = listPessoas.stream().filter( p -> p.getIdade() > 30).collect(Collectors.toList()); maioresTrinta.forEach(p -> System.out.println(p.getNome())); System.out.println("Pessoas que o nome iniciam com J:"); List nomesIniciadosJ = listPessoas.stream().filter( p -> p.getNome().startsWith("J")).collect(Collectors.toList()); nomesIniciadosJ.forEach(p -> System.out.println(p.getNome()));
42
Como vocês puderam ver, as funções lambda são mecanismos bastante poderosos, que facilitam a escrita de código conciso e evitam que o programador seja obrigado a escrever muito código, principalmente em operações simples, além de flexibilizar o mesmo. Apesar de serem bastante úteis, as funções lambda nem sempre são a melhor opção, caso seja necessário reutilizar diversas vezes uma função, talvez seja melhor criar uma classe ou interface com apenas um método e não uma expressão lambda.
43
Referências http://www.devmedia.com.br/novidades-do-java-8-do-lambda-ao-metaspace/29056 Acesso em 15 mai 2016. http://www.devmedia.com.br/novidades-do-java-8-do-lambda-ao-metaspace/29056 http://www.devmedia.com.br/como-usar-funcoes-lambda-em-java/32826 Acesso em 15 mai 2016. http://www.devmedia.com.br/como-usar-funcoes-lambda-em-java/32826 https://code.google.com/archive/p/functionaljava/ Acesso em 15 mai 2016. https://code.google.com/archive/p/functionaljava/ https://code.google.com/archive/p/lambdaj/ Acesso em 15 mai 2016. https://code.google.com/archive/p/lambdaj/ https://code.google.com/archive/p/lambdaj/wikis/LambdajFeatures.wiki Acesso em 15 mai 2016. https://code.google.com/archive/p/lambdaj/wikis/LambdajFeatures.wiki http://www.infoq.com/br/news/2010/11/lambdaj Acesso em 15 mai 2016. http://www.infoq.com/br/news/2010/11/lambdaj http://www.devmedia.com.br/como-usar-funcoes-lambda-em-java/32826> Acesso em 15 mai 2016. http://www.devmedia.com.br/como-usar-funcoes-lambda-em-java/32826
44
Para a ciência da computação o cálculo lambda é importante porque é uma forma equivalente a se escrever a máquina de Turing. O cálculo lambda é uma forma mais simplificada de codificar funções recursivas.
45
O que é Lambda As funções Lambda vieram do cálculo lambda que foi desenvolvido por Church na mesma época de Allan Turing. Várias funções lamdas aceitam parametros. Se utilizar essas funções você estará utilizando uma tecnica chamade de Alta Ordem de Programa Funcional.
Apresentações semelhantes
© 2024 SlidePlayer.com.br Inc.
All rights reserved.