Ordenação de listas com Java 8 e Lambdas Expression
Neste exemplo, será mostrado como o Java 8 pode auxiliar no desenvolvimento de aplicações mostrando um exemplo de ordenação do Java 6 ao Java 8 com a utilização de lambdas.
Última atualização em: | 11252 Visualizações
Lambda Expressions é um novo recurso da linguagem java introduzido na versão 8 do Java. Eles permitem que você trate a funcionalidade como um argumento de método ou código como dados.
As expressões lambdas podem expressar instâncias de interfaces em um único método (interfaces funcionais) de forma mais compacta. É uma evolução da linguagem Java o que a torna mais flexível e deixa a implementação de código mais enxuta e simples.
Neste exemplo, ordenaremos uma lista de nomes do modo tradicional usando o Java 8, veja o código:
import java.util.Arrays;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
public class OrdenacaoLista {
public static void main(String args[]) {
List<String> ls = Arrays.asList("João", "José", "Maria", "Adam");
Comparator<String> comparator = new Comparator<String>() {
@Override
public int compare(String o1, String o2) {
return o1.compareTo(o2);
}
};
Collections.sort(ls, comparator);
for( String nome : ls ) {
System.out.println( nome );
}
}
}
Esta classe ao ser executada mostra o seguinte resultado:
Adam
José
João
Maria
Mas podemos melhorar a o código e deixar bem mais simples e limpo com a utilização de java 8, então vamos fazer passo a passo.
Primeiro, podemos substituir o Collections
pelo próprio objeto da lista, já que agora ela possui o método sort
, veja:
[...]
public static void main(String args[]) {
List<String> ls = Arrays.asList("João", "José", "Maria", "Adam");
[...]
ls.sort(comparator);
[...]
}
[...]
A interface Comparator
é uma interface funcional, sabemos disso verificando seu código:
@FunctionalInterface
public interface Comparator<T> {
[...]
}
Note que ela possui a anotação
@FunctionalInterface
isso significa que podemos utilizar Lambdas para implementar seu método e tudo vai funcionar.
Então podemos deixar o código da seguinte forma:
[...]
public static void main(String args[]) {
List<String> ls = Arrays.asList("João", "José", "Maria", "Adam");
Comparator<String> comparator = (o1, o2) -> {
return o1.compareTo(o2);
};
ls.sort(comparator);
[...]
}
[...]
Este código ainda pode ser melhor, como temos apenas uma linha na implementação do comparator, podemos deixar da seguinte forma:
[...]
public static void main(String args[]) {
List<String> ls = Arrays.asList("João", "José", "Maria", "Adam");
Comparator<String> comparator = (o1, o2) -> o1.compareTo(o2);
ls.sort(comparator);
for( String nome : ls ) {
System.out.println( nome );
}
}
[...]
Para simplificar ainda mais, podemos adicionar a implementação diretamente no .sort
da lista, veja:
[...]
public static void main(String args[]) {
List<String> ls = Arrays.asList("João", "José", "Maria", "Adam");
ls.sort((o1, o2) -> o1.compareTo(o2));
for( String nome : ls ) {
System.out.println( nome );
}
}
[...]
Para finalizar, é possível melhorar o for each
que faz a impressão dos nomes, veja:
[...]
public static void main(String args[]) {
List<String> ls = Arrays.asList("João", "José", "Maria", "Adam");
ls.sort((o1, o2) -> o1.compareTo(o2));
ls.forEach(System.out::println);
}
[...]
O que acha do nosso código agora?
Mas ainda podemos melhorar mais um pouco, que tal usarmos referências de métodos também no sort
? Então:
import java.util.Arrays;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
public class OrdenacaoLista {
public static void main(String args[]) {
List<String> ls = Arrays.asList("João", "José", "Maria", "Adam");
ls.sort(String::compareTo);
ls.forEach(System.out::println);
}
}
Simplificou bastante graças ao Lambdas do Java 8. Qualquer dúvida ou sugestão deixe nos comentários.
Não esqueca de deixar suas dúvidas nos comentários e compartilhar este post.