Java - Lambdas
Cesar Castro
Posted on October 9, 2020
Lambdas são funções não declaradas, ou seja, que não precisam ser declaradas para serem utilizadas, sendo desnecessário declarar um nome, parametros, modificadores de acesso e retorno. Também podemos dizer que uma lambda é uma forma mais simples de implementar um interface que só tem um único método.
Básicamente, as funções lambdas, no Java, tem a sintaxe:
(args)->(corpo).
Exemplos:
(int x, int y) -> { return x * y; }
Aluno exibicao = (Pessoa p)-> { System.out.println(p.idade); }
() -> System.out.println(new Date());
() -> { return 25.789; }
x -> x < 100;
As chaves só são obrigatórias quando o corpo da função tiver mais de um comando.
Por exemplo:
(int x, int y) -> { return x * y; }
Pode ser escrito:
(int x, int y) -> return x * y;
Obtendo o mesmo resultado.
As funções podem ou não ter parâmetros, e os tipos podem ser omitidos, assim o Java vai inferir o tipo.
Exemplo:
Função com parâmetros (e com o tipo declarado!).
(int x, int y) -> { return x * y; }
Função com parâmetros, sem o tipo declarado.
(x, y) -> { return x * y; }
Função sem parâmetro.
() -> System.out.println(new Date());
Sem o return, o tipo da função é inferido como void.
(a) -> this.x = a;
É importante ressaltar que a lambda é diferente do uso de classes anônimas, observável pelos .class gerados. Observará que não terá gerado diversos .class que seriam comumente gerados caso utilizasse-mos, para cada classe anônima utilizada.
Aplicações:
Threads
Nas threads elas são utilizadas para simplificação do código, tornando menos verboso.
/*
* Implementação da interface Runnable seguido da criação
* da thread com a implementação
*/
Runnable e = new Runnable(){
public void run(){
System.out.println(new Date());
}
};
new Thread(e).start();
/*
* A mesma implementação, agora utilizando expressão
* lambda
*/
Runnable e = () -> System.out.println(new Date());
new Thread(e).start();
/*
* Ainda pode ser mais simplificada!!
*/
new Thread(
() -> System.out.println(new Date())
).start();
Coleções
Nas Coleções flexibilização de funções de ordenação e filtros, por exemplo.
/*
* Imprimir todos os elementos de uma lista
*/
List l = Arrays.asList("João", "Ana", "Maria", "Cesar");
for(String s: l){
System.out.println(s);
}
/*
* Agora utilizando lambda
*/
List l = Arrays.asList("João", "Ana", "Maria", "Cesar");
l.forEach(s -> System.out.println(s));
/*
* Lambda com mais de um comando
*/
List l = Arrays.asList("João", "Ana", "Maria", "Cesar");
l.forEach(s -> {
if(StringUtils.equals("Cesar"){
System.out.println(a);
}
});
/*
* Ordenamento "convencional"
*/
List l = Arrays.asList("João", "Ana", "Maria", "Cesar");
Collections.sort(l, new Comparator(){
@Override
public int compare(String s1, String s2){
return s1.compareTo(s2);
}
});
l.forEach(p -> System.ou.println(p));
/*
* Ordenamento usando lambda
*/
List l = Arrays.asList("João", "Ana", "Maria", "Cesar");
Collections.sort(l, (String s1, String s2) -> s1.compareTo(s2));
l.forEach(p -> System.ou.println(p));
Listeners
Nos Listners usada para simplificação de código.
Listners são classes que implementam o Design Pattern Observer
/*
* "Ouvindo" uma ação em um botão em uma janela Swing
*/
botton.addActionListner(new ActionListner(){
@Oberride
public void actonPerformed(ActionEvent e){
System.out.println("Algumas ações...");
}
});
/*
* A mesma solução usando lambda
*/
button.addActionListner( (e) -> {
System.out.println("Algumas ações...");
});
Funções Genéricas
Nas Funções genéricas utilizado para criar funções genéricas utilizadas para solução de problemas, quando as funções aceitam expressões lambdas como parâmetro.
public class Principal{
/*
* um método que testa uma condição
*/
public static void testaExpressao(List l, Predicate p){
l.forEach(n -> {
if(p.test(n)){
System.out.println(n);
}
});
}
/*
* chamando com lambda
*/
public void mai(String[] args){
List l = Arrays.asList("João", "Ana", "Maria", "Cesar");
//Imprime o nome do "Cesar", se existir
testaExpressao(l, (n) -> StringUtils.equals("Cesar"));
//Imprime toda a lista
testaExpressao(l, (n) -> true);
//Não imprime nada
testaExpressao(l, (n) -> false);
}
}
Posted on October 9, 2020
Join Our Newsletter. No Spam, Only the good stuff.
Sign up to receive the latest update from our blog.
Related
November 30, 2024
November 30, 2024