Ordenando Listas baseado em mais de um atributo

Olá,

Gostaria de saber como faço pra ordenar uma lista baseado em mais de um atributo.

Por exemplo:

Tem uma lista de provas com diversas disciplinas cada, e eu quero ordenar em ordem decrescente pelo número total de questões acertadas, no caso de empate ordenar somente os empatados pelo maior número de acertos na disciplina Português, em caso de novo empate, ordenar os empatados pela maior idade, e assim sucessivamente.

Agradeço qualquer ajuda.

Vc tem um objeto que tem nome e sobrenome, como fazer para ordenar pelos dois?

return (this.nome + this.sobrenome).compareTo(obj.getNome() + obj.getSobreome) no seu compareTo.

Ai vc adapta para o seu caso.

[quote=jefferson_amarals]Olá,

Gostaria de saber como faço pra ordenar uma lista baseado em mais de um atributo.

Por exemplo:

Tem uma lista de provas com diversas disciplinas cada, e eu quero ordenar em ordem decrescente pelo número total de questões acertadas, no caso de empate ordenar somente os empatados pelo maior número de acertos na disciplina Português, em caso de novo empate, ordenar os empatados pela maior idade, e assim sucessivamente.

[/quote]

Primeira coisa : não use nenhum tipo de concatenação.
Em java vc implementa um comparator assim


public class ResultadoProvaComparator<ResultadoProva>{

   public int compare(ResultadoProva a , ResultadoProvab){
            
           int comp = a.getTotalQuestoesAcertadas().compareTo(b.getTotalQuestoesAcertadas());
           if ( comp == 0 ){
                  // empate no primeiro criterio, usando o segundo
                 comp = a.getMaiorNumeroDeAcertos().compareTo(b.getMaiorNumeroDeAcertos());  
                 if ( comp == 0 ){
                       // empate no segundo criterio, usando o terceiro e ultimo 
                       return a.getIdade().compareTo(b.getIdade());  
                  }
           }
           return comp;
 
  }

}

Basicamente vc cria um if para cada criterio quando ele dá zero. O ultimo critério retorna diretamente.
Quando o resultado não for zero, o return final fora dos ifs será usado.

Esta mecanica ordena na ordem crescente e vc usa assim :

Collections.sort(lista, new ResultadoProvaComparator());

Para a ordem crescente vc usa assim

Collections.sort(lista, Collections.reverseOrder(new ResultadoProvaComparator()));

E na ordem Alfabética?
Já tenho uma lista (ArrayList). Ao exibir no RichComboBox ela aparece desornedada. A primeira combo tá ordenada, mas a segunda q é gerada a partir da segunda, não.

Existe alguma forma SIMPLES de se fazer isso?

vlw :wink:

Poxa, gente… rs mandei ordenar por nome na consulta ao banco… rs

vlw :wink: