Mudanças entre as edições de "Exemplo de Lambda Java"
(Criou página com 'Imagine uma lista de palavras do tipo String. Segue abaixo um exemplo de Lambda Java: <source lang="java"> palavras.forEach(s -> System.out.println(s)); </source> Repare que...') |
|||
(5 revisões intermediárias pelo mesmo usuário não estão sendo mostradas) | |||
Linha 26: | Linha 26: | ||
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). | 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: | ||
+ | |||
+ | <source lang="java"> | ||
+ | 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); | ||
+ | </source> | ||
+ | |||
+ | Código com Lambda: | ||
+ | |||
+ | <source lang="java"> | ||
+ | palavras.sort((String o1, String o2) -> { | ||
+ | if (o1.length() < o2.length()) | ||
+ | return -1; | ||
+ | |||
+ | if (o2.length() > o2.length()) | ||
+ | return 1; | ||
+ | |||
+ | return 0; | ||
+ | }); | ||
+ | </source> | ||
+ | |||
+ | Código com Lambda simplificado: | ||
+ | <source lang="java"> | ||
+ | palavras.sort((o1, o2) -> { | ||
+ | if (o1.length() < o2.length()) | ||
+ | return -1; | ||
+ | |||
+ | if (o2.length() > o2.length()) | ||
+ | return 1; | ||
+ | |||
+ | return 0; | ||
+ | }); | ||
+ | </source> | ||
+ | |||
+ | Código com Lambda + uso da classe Integer: | ||
+ | <source lang="java"> | ||
+ | palavras.sort((o1, o2) -> { | ||
+ | return Integer.compare(o1.length(), o2.length()); | ||
+ | }); | ||
+ | </source> | ||
+ | |||
+ | Simplificando ainda mais o Lambda + uso da classe Integer: | ||
+ | <source lang="java"> | ||
+ | palavras.sort((o1, o2) -> Integer.compare(o1.length(), o2.length())); | ||
+ | </source> | ||
+ | |||
+ | |||
+ | = Exemplo de Lambda com Thread = | ||
+ | |||
+ | Código sem Lambda: | ||
+ | |||
+ | <source lang="java"> | ||
+ | new Thread(new Runnable() { | ||
+ | |||
+ | @Override | ||
+ | public void run() { | ||
+ | System.out.println("Executando um Runnable"); | ||
+ | } | ||
+ | |||
+ | }).start(); | ||
+ | </source> | ||
+ | |||
+ | Código com Lambda: | ||
+ | |||
+ | <source lang="java"> | ||
+ | new Thread(() -> System.out.println("Executando um Runnable")).start(); | ||
+ | </source> | ||
[[Category: Java]] | [[Category: Java]] |
Edição atual tal como às 17h53min de 8 de julho de 2017
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();