Ordenação de coleção com dois ou mais indices

Olá gostaria de saber se existe como ordenar um coleção de dados por dois indices ou mais…
exemplo:

classe

int codigo
String nome
String endereco

e tenha uma coleção delas, quero ordenar por nome de forma descendente e por codigo de forma ascendente por sem perder a primeiro ordenação… sabem me informar como seria possivel criar algo desta natureza?

Oi javapaulomg,

Vc tem dois possiveis caminhos para realizar essa ordenacao. Um deles seria a classe Pessoa implementar a interface Comparable e para isso seria necessario criar o metodo compareTo que iria conter a logica de ordenacao que vc deseja. Outro caminho seria implementar um Comparator para a classe pessoa sendo que esse Comparator teria um metodo que receberia dois objetos retornando o resultado da comparacao entre ambos.

Acredito que implementar o Comparator seja mais interessante porque desta forma vc mantem a classe Pessoa mais simples alem de ser possivel implementar mais de um Comparator para que seja possivel realizar a ordenacao de formas diferentes.

Apos implementar o Comparator basta fazer uma chamada ao metodo sort da classe Collection passando o conjunto de dados que vc deseja ordenar e o Comparator a ser utilizado para que o seu conjunto seja ordenado.

Abaixo segue um exemplo do que foi explicado anteriormente:

[code]import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;

public class TesteOrdena {
public static void main(String[] args) {
ArrayList conj = new ArrayList();

    Pessoa p1 = new Pessoa(1,"Aaaa","Rua A");
    conj.add(p1);
    p1 = new Pessoa(2,"Bbbb","Rua B");
    conj.add(p1);
    p1 = new Pessoa(5,"Dddd","Rua D");
    conj.add(p1);
    p1 = new Pessoa(3,"Dddd","Rua D");
    conj.add(p1);
    p1 = new Pessoa(4,"Dddd","Rua D");
    conj.add(p1);
    p1 = new Pessoa(7,"Hhhh","Rua H");
    conj.add(p1);
    p1 = new Pessoa(6,"Hhhh","Rua H");
    conj.add(p1);
    p1 = new Pessoa(8,"Zaaa","Rua Z");
    conj.add(p1);
    p1 = new Pessoa(9,"Zzzz","Rua Z");
    conj.add(p1);
    
    for (int i = 0; i < conj.size(); i++) {
        System.out.println("Codigo = "+((Pessoa)conj.get(i)).getCodigo()+
                           " | Nome = "+((Pessoa)conj.get(i)).getNome());
    }
    
    Collections.sort(conj, new PessoaComparator());
    System.out.println("\r\nDepois da ordenação.....\r\n");

    for (int i = 0; i < conj.size(); i++) {
        System.out.println("Codigo = "+((Pessoa)conj.get(i)).getCodigo()+
                           " | Nome = "+((Pessoa)conj.get(i)).getNome());
    }
}

}

class Pessoa {
private int codigo;
private String nome;
private String endereco;

public Pessoa(int cod, String nom, String end) {
    this.codigo = cod;
    this.nome = nom;
    this.endereco = end;
}

public int getCodigo() {
    return codigo;
}

public void setCodigo(int codigo) {
    this.codigo = codigo;
}

public String getEndereco() {
    return endereco;
}

public void setEndereco(String endereco) {
    this.endereco = endereco;
}

public String getNome() {
    return nome;
}

public void setNome(String nome) {
    this.nome = nome;
}

}

class PessoaComparator implements Comparator {
public int compare(Object p1, Object p2)
throws ClassCastException {
if (!(p1 instanceof Pessoa) || !(p2 instanceof Pessoa))
throw new ClassCastException(“Objetos do tipo Pessoa esperados!”);

    Pessoa pes1 = (Pessoa)p1;
    Pessoa pes2 = (Pessoa)p2;
    
    int comp = pes1.getNome().compareTo(pes2.getNome());
    if (comp < 0) {
        comp = 1;
    } else if (comp > 0) {
        comp = -1;
    } else {
        if (pes1.getCodigo() == pes2.getCodigo()) {
            comp = 0;
        } else if (pes1.getCodigo() > pes2.getCodigo()) {
            comp = 1;
        } else {
            comp = -1;
        }
    }
    return comp;
}

}
[/code]
Acredito que isso resolva o seu problema.

Mais uma coisa, foi vc que criou esse post no Off-topic ou ele foi movido para ca?

Acredito que ele deveria estar em Java Basico…