Java: Um Guia Sobre Ordenação

Ordenar dados é uma necessidade comum em programação. Em Java, essa tarefa é facilitada por várias ferramentas na sua biblioteca padrão. Este artigo visa mostrar o processo de ordenação, apresentando métodos práticos aplicáveis a arrays, listas e até critérios personalizados.

Você ainda não está por dentro de método nos Java, sugiro a leitura desse artigo:
Dominando a Linguagem Java: Conceitos Básicos para o Sucesso

Ordenação Simples de Arrays com Java

Para começar, Java fornece a classe Arrays, que inclui o método sort() para ordenar elementos. Esse método é sobrecarregado para suportar tanto tipos primitivos quanto objetos, realizando a ordenação de forma crescente por padrão.

Exemplo para Arrays Primitivos com Java:

import java.util.Arrays;

public class ExemploOrdenacao {
    public static void main(String[] args) {
        int[] numeros = {5, 3, 2, 8, 1};
        Arrays.sort(numeros);
        System.out.println(Arrays.toString(numeros));
    }
}
//[1, 2, 3, 5, 8]

Trabalhando Coleções com Java

Quando se trata de coleções, como listas, a classe Collections oferece o método sort(), adequado para objetos que implementam a interface Comparable. Isso permite a ordenação baseada na ordem natural dos objetos.

NLW unite | Evento gratuito de programação na prática | Rocketseat
Desafie-se em uma nova tecnologia criando um projeto completo em 3 aulas no maior evento online e gratuito de programação na prática para todos os níveis da Rocketseat.

Exemplo para Listas:

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

public class ExemploLista {
    public static void main(String[] args) {
        List<String> frutas = new ArrayList<>();
        frutas.add("Banana");
        frutas.add("Maçã");
        frutas.add("Pera");
        frutas.add("Laranja");

        Collections.sort(frutas);
        System.out.println(frutas);
    }
}
//[Banana, Laranja, Maçã, Pera]

Customização com Comparator

Para casos onde a ordenação natural não é suficiente, Java permite a definição de regras customizadas através da interface Comparator. Isso é particularmente útil para ordenar objetos com base em propriedades específicas.

Exemplo: Ordenação por Idade

import java.util.ArrayList;
import java.util.List;

class Pessoa {
    String nome;
    int idade;

    Pessoa(String nome, int idade) {
        this.nome = nome;
        this.idade = idade;
    }

    @Override
    public String toString() {
        return nome + ": " + idade;
    }
}

public class ExemploComparator {
    public static void main(String[] args) {
        List<Pessoa> pessoas = new ArrayList<>();
        pessoas.add(new Pessoa("João", 20));
        pessoas.add(new Pessoa("Ana", 30));
        pessoas.add(new Pessoa("Carlos", 25));

        pessoas.sort((p1, p2) -> Integer.compare(p1.idade, p2.idade));
        System.out.println(pessoas);
    }
}
//[João: 20, Carlos: 25, Ana: 30]

Avançando com Streams

Com a introdução de Streams no Java 8, a ordenação se tornou ainda mais expressiva e flexível, permitindo encadeamento de operações e facilidade no processamento de grandes volumes de dados.

NLW unite | Evento gratuito de programação na prática | Rocketseat
Desafie-se em uma nova tecnologia criando um projeto completo em 3 aulas no maior evento online e gratuito de programação na prática para todos os níveis da Rocketseat.

Exemplo com Streams:

import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;

public class ExemploStream {
    public static void main(String[] args) {
        List<String> frutas = Arrays.asList("Banana", "Maçã", "Pera", "Laranja");

        List<String> sortedFrutas = frutas.stream().sorted().collect(Collectors.toList());
        System.out.println(sortedFrutas);
    }
}
//[Banana, Laranja, Maçã, Pera]

Java oferece uma ampla gama de ferramentas para ordenação, desde métodos simples para arrays e listas até funcionalidades avançadas com critérios customizados e o uso de Streams. Compreender estas ferramentas e saber quando aplicá-las é essencial para criar programas eficientes e realizar manipulações de dados de maneira eficaz.