Exemplo de Lambda Java

From Basef
Jump to: navigation, search

Imagine uma lista de palavras do tipo String. Segue abaixo um exemplo de Lambda Java:

palavras.forEach(s -> System.out.println(s));

Repare que é uma Lambda bem simples. Ela pôde ser escrita da forma simplificada acima pois só tem um parâmetro. A forma não simplificada de escrever esta mesma Lambda é a seguinte:

palavras.forEach((String s) -> {
    System.out.println(s);
});

As Lambdas acima simplificam muito a vida do programador. Se não fosse usado Lambda, o seguinte código teria sido utilizado:

palavras.forEach(new Consumer<String>() {
    @Override
    public void accept(String s) {
        System.out.println(s);
    }
});

Repare que, ao usar a sintaxe de Lambda, o compilador Java infere automaticamente que uma Classe anônima do tipo Consumer deve ser criada, e que o método accept deve ser implementado o código informado (System.out.println).

As Lambdas funcionam para interface que tenham apenas 1 método abstrato (interface funcional).

Exemplo de Lambda com Comparator

Código sem Lambda:

palavras.sort(new Comparator<String>() {
    @Override
    public int compare(String o1, String o2) {
        if (o1.length() < o2.length())
            return -1;
 
        if (o2.length() > o2.length())
            return 1;
 
        return 0;
    }
});
 
System.out.println(palavras);

Código com Lambda:

palavras.sort((String o1, String o2) -> {
    if (o1.length() < o2.length())
        return -1;
 
    if (o2.length() > o2.length())
        return 1;
 
    return 0;
});

Código com Lambda simplificado:

palavras.sort((o1, o2) -> {
    if (o1.length() < o2.length())
        return -1;
 
    if (o2.length() > o2.length())
        return 1;
 
    return 0;
});

Código com Lambda + uso da classe Integer:

palavras.sort((o1, o2) -> {
    return Integer.compare(o1.length(), o2.length());
});

Simplificando ainda mais o Lambda + uso da classe Integer:

palavras.sort((o1, o2) -> Integer.compare(o1.length(), o2.length()));


Exemplo de Lambda com Thread

Código sem Lambda:

new Thread(new Runnable() {
 
    @Override
    public void run() {
        System.out.println("Executando um Runnable");
    }
 
}).start();

Código com Lambda:

new Thread(() -> System.out.println("Executando um Runnable")).start();