Ordenação de listas com Java 8 e Lambdas Expression

Postado em por Wolmir Cezer Garbin em Java | 381 Visualizações
Última atualização em:

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.

Ordenação de listas com Java 8 e Lambdas Expression

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.


Wolmir Cezer Garbin

Wolmir Cezer Garbin


Sou formado em Desenvolvimento de Sistemas para Internet pela faculdade Mater Dei e Pós graduado em Desenvolvimento de sistemas em Java pela UTFPR. Trabalho a mais de 9 anos com desenvolvimento em Java, Android e Web utilizando as principais tecnologias do mercado. Atuo como professor na faculdade Mater Dei, programador na Garbo Software e criador do Receitas de Código.

Ver mais

FIQUE POR DENTRO

Receba as novidades todo mês em seu e-mail!

Apoiadores

Code Conference

Esta é uma conferência de código realizada na cidade de Pato Branco para dissiminar tendências e informações sobre programação e novas tecnológias

Veja mais sobre o Code Conference

Publique seu post no Receitas de Código

Agora você pode publicar seu post no Receitas de Código e compartilhar seu conhecimento com muitas pessoas!

Quero publicar